django片段缓存仅适用于匿名用户

时间:2011-04-21 03:45:50

标签: django django-templates django-cache

我想为匿名用户使用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。除了把它放在包含中之外,还有一些巧妙的方法吗?感谢。

4 个答案:

答案 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缓存非常强大和复杂(就像在模板缓存中支持不同的语言一样)。