如何不在django中只缓存我的模板的一段代码

时间:2014-01-17 21:37:19

标签: python django caching django-templates

在django v.1.4。

问题:

由于我的模板由此视图呈现,该视图将完全存储在缓存中:

@cache_page(60*60*24)
def index(request):
    foo_form = FooForm()
    context = RequestContext(request, {
        'foo_form': foo_form
    })
    # An entire page is rendered
    return render_to_response('index.html', context_instance=context)

在我的模板中,我有一个if语句,用于检查用户是否进行身份验证:

...
<li>
    {%  if user.is_authenticated %}
        <a href="{% url 'home' %}" class="login">Enter</a>
    {% else %}
        <a href="" class="login" data-target="#login_modal" data-tggle="modal">Enter</a>
    {% endif %}

</li>
...

有一个模式由“Enter”按钮激活,当没有用户登录时应显示该按钮,否则当点击“Enter”按钮时,用户将被重定向到系统。

问题:是否有办法忽略我的模板中的那段代码不被缓存?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:1)

您应该使用模板片段缓存: https://docs.djangoproject.com/en/1.6/topics/cache/#template-fragment-caching

{% load cache %}
{% cache 500 sidebar request.user.username %}
    .. sidebar for logged in user ..
{% endcache %}

答案 1 :(得分:0)

使用ajax显示用户身份验证模板,因此缓存不会影响您的模板。

<li>

`{%  if user.is_authenticated %}`
   ` <a href="{% url 'home' %}" class="login">Enter</a>`
`{% else %}`
    `<a href="" class="login" data-target="#login_modal" data-tggle="modal">Enter</a>`

{% endif %}

</li>