创新互联Django4.0教程:Django4.0缓存框架-模板片段缓存

如果你获得更多的控制,你也可以使用 ​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 cdxwcx.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

标题名称:创新互联Django4.0教程:Django4.0缓存框架-模板片段缓存
分享链接:http://www.hantingmc.com/qtweb/news12/389162.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联