我有一个Django视图,它使用装饰器来启用缓存:
@cache_page(24 * 60 * 60) # cache for 24 hours
def index(request):
# view code
此视图对应于这样的模板:
{% extends "base.html" %}
{% load i18n %}
{% block content %}
html code
{% endblock %}
base.html:
{% load i18n %}
<!DOCTYPE html>
<html>
<head>
<div id="content">
{% block content %}
{% endblock %}
</div>
<!-- need to tun off caching here... -->
<div id="sidebar">
{% include "language_switcher.html" %}
{% include "login_box.html" %}
</div>
<!-- ...and then back on -->
</body>
</html>
在侧栏中,我有几个不应缓存的动态元素。我怎样才能“关闭”模板的这一部分(侧边栏)的缓存?
任何帮助都非常感激。
答案 0 :(得分:3)
检查此应用:https://github.com/codysoyland/django-phased和此博文:http://www.holovaty.com/writing/django-two-phased-rendering/
答案 1 :(得分:2)
我假设你知道template fragment caching - 我不认为在这里设置较低的值会将视图级缓存设置覆盖到更长的时间段。这当然意味着你必须分别缓存index.html的不同部分,这是可行的但不太可能你想要的。
您还可以查看clearcache
标记,了解已实施的模板片段here。
答案 2 :(得分:1)
你不能,真的。当您缓存整个视图时,Django根本不处理它。它只是从缓存中返回相同的响应,其中包括完全形成的HTML。您可以将不同的标头添加到缓存中,但除非有不同的内容(登录用户等),否则这对您没有帮助。只是改变了与其他内容无关的内容的基本块,这无济于事。
删除视图级缓存并在所需的视图中手动缓存中的内容。否则,你运气不好。