[英]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.