确保 django 模板永远不会被任何浏览器缓存
Ensuring django template is never cached by any browser
我有一个 django 模板,它关联了一个基于 class 的 DetailView
。我已经覆盖了 DetailView
的 get_context_data
方法,使用它来传递我在模板(本质上是图像)中显示的一些必需的 context
变量。这就是我所做的一切。
如何确保我的这个特定的 django 模板绝不会被任何浏览器缓存?通过各种来源告诉我我需要覆盖 dispatch
方法中的 HttpResponse
来完成无缓存?
我知道我需要设置 Cache-Control
、Pragma
、Expiry
等。我一直无法在是否(或如何)方面取得进展) 覆盖调度方法。有人可以给我一个简单的说明性示例,说明他们将如何为这样的模板实现无缓存吗?
首先,您要控制 HTTP 缓存的是视图,而不是模板。
模板只是 HTML 的一大块,可以由任何视图呈现,视图是向 Web 浏览器发送 HTTP 响应的部分。
Django 带有一些方便的视图装饰器,用于控制视图返回的 HTTP headers:
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):
# ...
如果您使用的是 'class-based' 视图而不是简单的函数,那么这里有一个 gist here 示例,其中包含如何将此装饰器转换为视图 Mixin class:
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"
我有一个 django 模板,它关联了一个基于 class 的 DetailView
。我已经覆盖了 DetailView
的 get_context_data
方法,使用它来传递我在模板(本质上是图像)中显示的一些必需的 context
变量。这就是我所做的一切。
如何确保我的这个特定的 django 模板绝不会被任何浏览器缓存?通过各种来源告诉我我需要覆盖 dispatch
方法中的 HttpResponse
来完成无缓存?
我知道我需要设置 Cache-Control
、Pragma
、Expiry
等。我一直无法在是否(或如何)方面取得进展) 覆盖调度方法。有人可以给我一个简单的说明性示例,说明他们将如何为这样的模板实现无缓存吗?
首先,您要控制 HTTP 缓存的是视图,而不是模板。
模板只是 HTML 的一大块,可以由任何视图呈现,视图是向 Web 浏览器发送 HTTP 响应的部分。
Django 带有一些方便的视图装饰器,用于控制视图返回的 HTTP headers:
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):
# ...
如果您使用的是 'class-based' 视图而不是简单的函数,那么这里有一个 gist here 示例,其中包含如何将此装饰器转换为视图 Mixin class:
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"