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 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