2009-07-16 147 views
1

我有一个用Django编写的博客,我开始使用带有文件系统缓存后端的基本Django缓存中间件。不幸的是,这导致了两件事情被缓存,本应该不是这样的:登录用户的管理链接(例如“编辑此帖子”)以及基于cookie的预填充评论表单。Django缓存博客

要解决这个问题,我开始使用模板缓存标记:

{% load cache %} 

...admin links... 
{% cache 500 blog_entry entry.id %} 
...entry... 
{% endcache %} 
...comment form... 

但它似乎是整个页面仍然得到缓存为好。如何将缓存系统设置为只有缓存您明确设置的模板部分?

编辑:对于评论,如果有人对博客发表评论,我将他们的姓名,网站和电子邮件地址存储在会话变量中。如果他们回到网站,那么我会用这些数据预先填写表单的这些部分。但这意味着缓存系统有可能使用预先填充的数据来缓存视图,这是不好的。

回答

5

添加到您的settings.py:

CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True 

这应该可以解决与管理环节的问题,我不太明白你的第二个问题(预填充评论)是什么?

+0

这工作,很简单。 复杂的解决方案将缓慢移动缓存(缓存数据,而不是渲染页面)。虽然不是最好的解决方案。 iBegin或Curse.com提到总是使用通用数据渲染缓存页面,然后使用Javascript插入已登录的特权用户内容(管理链接,Hello用户名等)。这是更复杂的,但真正利用缓存的渲染内容最好。 – joej 2009-07-16 15:30:43

7

现在您需要删除缓存中间件,因为您正在缓存模板片段而不是整个页面。