2014-01-17 19 views
1

在django 1.4版下。如何不在django缓存我的模板的一段代码

问题:

由于我的模板是由这种观点,这将完全被保存在缓存中呈现:

@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”按钮时。

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

回答

0

您应该使用模板片段缓存: 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 %} 
+0

你好哥们!我将如何在我的代码中应用?我在代码中测试了这个模板片段缓存,但我不知道它是否完全正确。由于Django文档描述了templ片段缓存,它与使用装饰器在缓存中存储相同,就像我在我看来的那样。因此,应该存在某种方法来避免在代码的某些区域进行缓存,但这更像是一种无人愿意分享的秘密。 –

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>