举报投诉联系我们 手机版 热门标签 名动网
您的位置:名动网 > django缓存原理 Django4.0 缓存框架-模板片段缓存

django缓存原理 Django4.0 缓存框架-模板片段缓存

2023-05-29 07:20 Django4中文教程

django缓存原理 Django4.0 缓存框架-模板片段缓存

django缓存原理 Django4.0 缓存框架-模板片段缓存

django缓存原理

如果你获得更多的控制,你也可以使用 ​cache ​模板标签(tag)来缓存模板片段。要使你的模板能够访问这个标签,请将 ​{% load cache %}​ 放在模板顶部。

{% cache %}​ 模板标签在给定的时间里缓存片段内容。它需要至少两个参数:缓存时效时间(以秒为单位),缓存片段的名称。如果缓存失效时间被设置为 ​None ​,那么片段将被永久缓存。名称不能使变量名。例如:

{% load cache %}
{% cache 500 sidebar %}
    .. sidebar ..
{% endcache %}

有时你想缓存片段的多个副本,这取决于显示在的片段内一些动态数据。比如,你可能想为你的站点内每个用户分别独立缓存上面例子中的使用的 sidebar 副本。通过传递一个或多个附加参数,参数可能是带有或不带过滤器的变量,​{% cache %}​ 模板标签必须在缓存片断中被唯一识别:

{% load cache %}
{% cache 500 sidebar request.user.username %}
    .. sidebar for logged in user ..
{% endcache %}

如果 ​USE_I18N ​被设为 ​True​,那么站点中间件缓存将支持多语言( respect the active language )。对于 ​cache ​模板标签来说,你可以使用模板中可用的特定翻译变量之一( translation-specific variables )来达到同样的结果:

{% load i18n %}
{% load cache %}

{% get_current_language as LANGUAGE_CODE %}

{% cache 600 welcome LANGUAGE_CODE %}
    {% translate "Welcome to example.com" %}
{% endcache %}

缓存失效时间可以是模板变量,只要模板变量解析为一个整数值即可。例如,如果模板变量 ​my_timeout ​被设置成 600,那么下面两个例子是一样的:

{% cache 600 sidebar %} ... {% endcache %}
{% cache my_timeout sidebar %} ... {% endcache %}

这个可以避免在模板中重复。你可以在某处设置缓存失效时间,然后复用这个值。
默认情况下,缓存标签会先尝试使用名为 ​template_fragments​的缓存。如果这个缓存不存在,它将回退使用默认缓存。你可以选择一个备用缓存后端与 ​using ​关键字参数一起使用,这个参数必须是标签的最后一个参数。

{% cache 300 local-thing ...  using="localcache" %}

未设置指定的缓存名称将被视为错误。

django.core.cache.utils.make_template_fragment_key(fragment_name, vary_on=None)

如果你想获得用于缓存片段的缓存键,你可以使用 ​make_template_fragment_key ​。​fragment_name ​是 ​cache ​模板标签的第二个参数;​vary_on ​是所有传递给标签的附加参数列表。这个函数可用来使缓存项无效或者重写。例如:

>>> from django.core.cache import cache
>>> from django.core.cache.utils import make_template_fragment_key
# cache key for {% cache 500 sidebar username %}
>>> key = make_template_fragment_key("sidebar", [username])
>>> cache.delete(key) # invalidates cached template fragment
True


阅读全文
以上是名动网为你收集整理的django缓存原理 Django4.0 缓存框架-模板片段缓存全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 名动网 mdwl.vip 版权所有 联系我们