【问题标题】:Django Caching for a BlogDjango 缓存博客
【发布时间】:2010-11-11 09:17:20
【问题描述】:

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

为了解决这个问题,我开始使用模板缓存标签:

{% load cache %}

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

但似乎整个页面仍在缓存中。您如何设置缓存系统以仅缓存您明确设置的模板部分?

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

【问题讨论】:

    标签: django caching


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      将此添加到您的 settings.py:

      CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
      

      这应该可以解决管理链接的问题,我不太明白您的第二个问题(预先填充的 cmets)是什么?

      【讨论】:

      • 这很有效而且很简单。复杂的解决方案是将缓存移动到更低的位置(缓存数据,而不是呈现的页面)。不过,这不是最好的解决方案。 iBegin 或 Curse.com 提到总是使用通用数据渲染可缓存页面,然后使用 Javascript 插入登录和特权用户内容(管理链接、Hello 用户名等)。这更复杂,但真正充分利用了渲染内容的缓存。
      • @joej - 我可能会使用 JS 的想法来做评论表单的填充。谢谢。
      • 这篇 Adrian Holovaty 文章可能值得一读:holovaty.com/writing/django-two-phased-rendering 我不太喜欢使用 JS 插入内容,即使它只是管理内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 2023-03-23
      • 2015-06-03
      相关资源
      最近更新 更多