如何防止请求对象在Django中缓存

时间:2012-12-10 10:54:05

标签: django caching memcached

我在django项目中使用memcached进行缓存,我有这样的视图

def questions(request):
    # code to fetch all questions

除了从数据库返回一个问题列表之外,该函数什么都不做,但是对于它呈现的页面,结果有一个标题,我在其中显示request.user名称。

如果我直接使用@cache_page装饰器,那么请求对象也会被缓存,并且该页面上的request.user也会从缓存中获取。因此,当我进入问题页面时,我会看到别人的名字。

有没有办法可以阻止请求对象使用装饰器进行缓存。一种方法是使用低级api并缓存我想要缓存的查询集,但是是否可以编写一个不会缓存与请求对象相关的任何内容的装饰器?

我希望我的问题很明确。

1 个答案:

答案 0 :(得分:3)

考虑为您的页面修改模板,这样您就可以根据用户

缓存一个块
{% load cache %}
{% cache 500 sidebar request.user.username %}
    .. sidebar for logged in user ..
{% endcache %}

和其他块对所有用户都是一样的

{% cache 500 questions %}
    .. questions list ..
{% endcache %}

查看Django Template fragment caching docs

相关问题