[英]Django caching in a custom context processor
我有一個自定義上下文處理器,可用於生成動態菜單和站點范圍內的當前應用程序列表:
from portal.models import *
def base_items(request):
return {
...
'app_items': App.objects.filter(isonline=True),
'menu_items': MainMenu.objects.all().order_by('position'),
}
編輯:
我的模板(請注意,許多這些URL在Django框架之外,並且根據語言而有所不同。因此,需要將它們硬編碼到db字段中:
<ul class="menu">
{% for item in menu_items %}
{% if LANGUAGE_CODE = "en-us" %}
<li><a title="{{ item.title_en }}" href="{{ item.url_en }}">{{ item.title_en }}</a>
<ul>
{% for subitem in item.submenu_set.all %}
<li><a title="{{ subitem.title_en }}" href="{{ subitem.url_en }}">{{ subitem.title_en }}</a></li>
{% endfor %}
</ul>
</li>
{% else %}
<li><a title="{{ item.title_es }}" href="{{ item.url_es }}">{{ item.title_es }}</a>
<ul>
{% for subitem in item.submenu_set.all %}
<li><a title="{{ subitem.title_es }}" href="{{ subitem.url_es }}">{{ subitem.title_es }}</a></li>
{% endfor %}
</ul>
</li>
{% endif %}
{% endfor %}
</ul>
我的問題是-如何緩存這些不經常更改的結果?
我嘗試了@cache_page裝飾器,但是可以看到我的頁面仍在訪問菜單項對象的數據庫。
任何幫助,不勝感激。
您可以使用django 低級緩存API 。 請注意,您可能必須將查詢集強制轉換為list 。
嘗試將lamdas表達式返回到模板:
'app_items': lambda: App.objects.filter(isonline=True),
這樣,它就不會被編譯/緩存,並且可以動態工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.