Has*_*aig 2 python django httpresponse django-views
我有一个基于类的 django 模板DetailView。我已经覆盖了 的get_context_data方法DetailView,使用它来传递context我在模板中显示的一些必需变量(本质上是一个图像)。这就是我所做的一切。
我如何确保我的这个特定的 django 模板永远不会被任何浏览器缓存?通过各种渠道涉水告诉我,我需要过骑HttpResponse在dispatch实现无缓存的方法?
据我所知,我需要设置Cache-Control,Pragma,Expiry等我只是一直无法作出关于是否要前进(或如何)过度乘坐调度方法。有人可以给我一个简单的说明性示例,说明他们将如何为这样的模板实现无缓存?
首先,您想要控制 HTTP 缓存的是视图而不是模板。
模板只是一段可以由任何视图呈现的 HTML,视图是向 Web 浏览器发送 HTTP 响应的内容。
Django 带有一些方便的视图装饰器,用于控制视图返回的 HTTP 标头: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):
# ...
Run Code Online (Sandbox Code Playgroud)
如果您使用的是“基于类”的视图而不是简单的函数,那么这里有一个要点,其中包含如何将此装饰器转换为视图 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)
Run Code Online (Sandbox Code Playgroud)
...您将在项目中使用,例如:
from django.views.generic.detail import DetailView
class ArticleView(NeverCacheMixin, DetailView):
template_name = "article_detail.html"
queryset = Article.objects.articles()
context_object_name = "article"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1814 次 |
| 最近记录: |