【问题标题】:Django prevent caching of included html fragmentDjango阻止缓存包含的html片段
【发布时间】:2012-05-19 06:04:03
【问题描述】:

我有一个 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> 

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

非常感谢任何帮助。

【问题讨论】:

    标签: django templates caching


    【解决方案1】:

    【讨论】:

    • 正确。这看起来很有希望。
    【解决方案2】:

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

    您还可以查看clearcache 标记以获取实现here 的模板片段。

    【讨论】:

    • 是的。我认为如果需要我可以使用模板缓存,它只是方便缓存整个视图。模板片段缓存可能是最好的解决方案。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 2013-04-10
      • 2020-05-14
      • 2023-04-04
      • 2010-12-25
      • 1970-01-01
      • 2011-04-07
      • 2011-10-27
      相关资源
      最近更新 更多