我想为匿名用户使用django片段缓存,但为经过身份验证的用户提供新数据。这似乎工作正常:
{% if user.is_anonymous %}
{% load cache %}
{% cache 300 "my-cache-fragment" %}
<b>I have to write this out twice</b>
{% endcache %}
{% else %}
<b>I have to write this out twice</b>
{% endif %}
唯一的问题是我必须重复要缓存的html。除了把它放在包含中之外,还有一些巧妙的方法吗?感谢。
答案 0 :(得分:2)
尝试为经过身份验证的用户设置缓存超时为零。
views.py:
context = {
"cache_timeout": 300 if request.user.is_anonymous() else 0,
}
模板:
{% load cache %}
{% cache cache_timeout "my-cache-fragment" %}
<b>I have to write this only once</b>
{% endcache %}
答案 1 :(得分:1)
{% with cache_timeout=user.is_staff|yesno:"0,300" %}
{% cache cache_timeout cacheidentifier user.is_staff %}
your content here
{% endcache %}
{% endwith %}
答案 2 :(得分:0)
不确定我理解这个问题......
{% load cache %}
{% cache 300 "my-cache-fragment" %}
<b>I have to write this out twice</b>
{% endcache %}
{% if not user.is_anonymous %}
<b>And this is the extra uncached stuff for authenticated users</b>
{% endif %}
答案 3 :(得分:0)
您可以通过将额外参数传递给cache
标记来指定缓存,例如:
{% cache 500 sidebar request.user.is_anonymous %}
查看here了解详情... 但这也会缓存登录用户的数据......
可能你必须写一个custom template tag。您可以先检查现有的cache
代码,然后根据该代码创建自定义代码。但是不要忘记,django缓存非常强大和复杂(就像在模板缓存中支持不同的语言一样)。