3

我有一个 Django 视图,它使用装饰器来启用缓存:

@cache_page(24 * 60 * 60) # cache for 24 hours
def index(request):
    # view code

此视图对应于这样的模板:

{% extends "base.html" %}

{% load i18n %}

{% block content %}
    html code
{% endblock %}

base.html:

{% load i18n %}
<!DOCTYPE html>
<html>
<head>
      <div id="content">
      {% block content %}
      {% endblock %}
      </div>

      <!-- need to tun off caching here... -->
      <div id="sidebar">
          {% include "language_switcher.html" %}
          {% include "login_box.html" %}
      </div>
      <!-- ...and then back on -->

</body>
</html> 

在侧栏中,我有几个不应缓存的动态元素。如何仅“关闭”模板这部分(侧边栏)的缓存?

非常感谢任何帮助。

4

3 回答 3

3

检查此应用程序:https ://github.com/codysoyland/django-phased和此博客文章: http: //www.holovaty.com/writing/django-two-phased-rendering/

于 2012-05-10T16:26:31.530 回答
2

我假设您知道模板片段缓存- 不过,我不相信在此处设置较低的值会覆盖设置为较长时间的视图级缓存。这当然意味着您必须分别缓存 index.html 的不同部分,这是可行的,但不太可能是您想要的。

您还可以查看此处clearcache实现的模板片段的标记。

于 2012-05-10T16:05:49.893 回答
1

你不能,真的。当你缓存整个视图时,Django 根本不处理它。它只是从缓存中返回相同的响应,其中包括完整的 HTML。您可以将不同的标头添加到缓存中,但这对您没有帮助,除非有一些东西可以改变(登录用户等)。仅对与其他任何内容无关的基本更改内容块无济于事。

删除视图级缓存并手动缓存您想要的视图中的内容否则,你就不走运了。

于 2012-05-10T16:06:49.843 回答