在Django中,如何才能在每次模板渲染时自动设置 "cache-control"?

问题描述 投票:4回答:4

我想把缓存控制设置成一个更高的数字,而不是 "no-store",这是Django的默认值。

我可以用全局的方式来配置吗?

python django http caching browser
4个回答
2
投票

呃......我会小心这个问题。模板在每次请求时都会被处理。你不希望只是把它设置为随意缓存,数据可能会改变。

幸运的是,Django提供了缓存功能。我不知道它是否正确设置了无缓存,但它绝对可以防止不需要的重复查询。这就是你想要使用的东西。

阅读一下 http:/docs.djangoproject.comendevtopicscache。


13
投票

你可以写一个自定义的中间件(未经测试,先从这样的东西开始,然后看看 文件). 对于一个提供相当静态信息的网站来说,它可以节省大量的网络资源,比如彩票结果或历史股票行情。

# my_middleware.py
from django.conf import settings

# default 30 days
MAX_AGE = getattr(settings, 'CACHE_CONTROL_MAX_AGE', 2592000)

class MaxAgeMiddleware(object):
    def process_response(self, request, response):
        response['Cache-Control'] = 'max-age=%d' % MAX_AGE
        return response

在settings.py MIDDLEWARE_CLASSES中附加你的中间件;中间件就像洋葱层一样--顺序很重要,在响应阶段,先处理的最后处理。

设置CACHE_CONTROL_MAX_AGE或其他参数,然后试试。


0
投票

在django 1.2中,有一种方法可以设置 "每个站点 "的缓存。

http:/docs.djangoproject.comen1.2topicscache#the-per-site-cache。


0
投票

你看 泛白 包,如果你不想让nginxapache为你做这些工作。它自动对静态文件进行哈希处理,然后对静态文件进行最佳压缩和缓存设置。

如果你想在一个单独的,动态的视图中设置它(看起来不像你的情况,但也许对其他访问者来说)。

response = HttpResponse(template.render(context, request))
response['Cache-Control'] = f'max-age={60*60*24}'
return response
© www.soinside.com 2019 - 2024. All rights reserved.