Django4.0 緩存框架-模板片段緩存

2022-03-17 14:39 更新

如果你獲得更多的控制,你也可以使用 ?cache ?模板標(biāo)簽(tag)來緩存模板片段。要使你的模板能夠訪問這個標(biāo)簽,請將 ?{% load cache %}? 放在模板頂部。

?{% cache %}? 模板標(biāo)簽在給定的時間里緩存片段內(nèi)容。它需要至少兩個參數(shù):緩存時效時間(以秒為單位),緩存片段的名稱。如果緩存失效時間被設(shè)置為 ?None ?,那么片段將被永久緩存。名稱不能使變量名。例如:

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

有時你想緩存片段的多個副本,這取決于顯示在的片段內(nèi)一些動態(tài)數(shù)據(jù)。比如,你可能想為你的站點(diǎn)內(nèi)每個用戶分別獨(dú)立緩存上面例子中的使用的 sidebar 副本。通過傳遞一個或多個附加參數(shù),參數(shù)可能是帶有或不帶過濾器的變量,?{% cache %}? 模板標(biāo)簽必須在緩存片斷中被唯一識別:

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

如果 ?USE_I18N ?被設(shè)為 ?True?,那么站點(diǎn)中間件緩存將支持多語言( respect the active language )。對于 ?cache ?模板標(biāo)簽來說,你可以使用模板中可用的特定翻譯變量之一( translation-specific variables )來達(dá)到同樣的結(jié)果:

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

{% get_current_language as LANGUAGE_CODE %}

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

緩存失效時間可以是模板變量,只要模板變量解析為一個整數(shù)值即可。例如,如果模板變量 ?my_timeout ?被設(shè)置成 600,那么下面兩個例子是一樣的:

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

這個可以避免在模板中重復(fù)。你可以在某處設(shè)置緩存失效時間,然后復(fù)用這個值。
默認(rèn)情況下,緩存標(biāo)簽會先嘗試使用名為 ?template_fragments?的緩存。如果這個緩存不存在,它將回退使用默認(rèn)緩存。你可以選擇一個備用緩存后端與 ?using ?關(guān)鍵字參數(shù)一起使用,這個參數(shù)必須是標(biāo)簽的最后一個參數(shù)。

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

未設(shè)置指定的緩存名稱將被視為錯誤。

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

如果你想獲得用于緩存片段的緩存鍵,你可以使用 ?make_template_fragment_key ?。?fragment_name ?是 ?cache ?模板標(biāo)簽的第二個參數(shù);?vary_on ?是所有傳遞給標(biāo)簽的附加參數(shù)列表。這個函數(shù)可用來使緩存項(xiàng)無效或者重寫。例如:

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


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號