gpt4 book ai didi

python - 确保 django 模板永远不会被任何浏览器缓存

转载 作者:行者123 更新时间:2023-11-30 23:00:11 28 4
gpt4 key购买 nike

我有一个 django 模板,其中有一个与之关联的基于类的 DetailView 。我已经重写了 DetailViewget_context_data 方法,使用它来传递我在模板中显示的一些必需的 context 变量(本质上是一个图像)。这就是我所做的一切。

如何确保我的这个特定 django 模板永远不会被任何浏览器缓存?查阅各种来源告诉我,我需要重写 dispatch 方法中的 HttpResponse 来实现无缓存?

我知道我需要设置 Cache-ControlPragmaExpiry 等。我只是无法在是否(或如何)覆盖调度方法方面取得进展。有人可以给我一个简单的说明性示例,说明他们将如何为这样的模板实现无缓存吗?

最佳答案

首先,您想要控制 HTTP 缓存的是 View ,而不是模板

模板只是一个可以由任何 View 呈现的 HTML block , View 是将 HTTP 响应发送到 Web 浏览器的内容。

Django 附带了一些方便的 View 装饰器,用于控制 View 返回的 HTTP header :
https://docs.djangoproject.com/en/1.9/topics/cache/#controlling-cache-using-other-headers

您可以在文档中找到这个简单的示例:

from django.views.decorators.cache import never_cache

@never_cache
def myview(request):
# ...

如果您使用“基于类”的 View 而不是简单的函数,那么有一个 gist here举例说明如何将此装饰器转换为 View Mixin 类:

from django.utils.decorators import method_decorator
from django.views.decorators.cache import never_cache


class NeverCacheMixin(object):
@method_decorator(never_cache)
def dispatch(self, *args, **kwargs):
return super(NeverCacheMixin, self).dispatch(*args, **kwargs)

...您可以在项目中使用它,例如:

from django.views.generic.detail import DetailView


class ArticleView(NeverCacheMixin, DetailView):
template_name = "article_detail.html"
queryset = Article.objects.articles()
context_object_name = "article"

关于python - 确保 django 模板永远不会被任何浏览器缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35385468/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com