在Django中,如何为每个模板渲染自动设置“缓存控制”?

时间:2010-12-14 21:55:34

标签: python django http caching browser

我想将缓存控制设置为更高的数字,而不是“no-store”,这是django的默认设置。

我可以用某种全球性的方式配置它吗?

4 个答案:

答案 0 :(得分:12)

您可以编写自定义中间件(未经测试,从这样的内容开始,然后查看docs)。例如,它可以为提供非常静态信息的网站节省大量网络资源,例如彩票结果或历史股票报价。

# 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或任何其他参数并试一试。

答案 1 :(得分:1)

呃......我会小心这个。每个请求都会处理模板。你不想只是把它设置为缓慢无聊;数据可以(也可能会)改变。

谢天谢地,Django提供了缓存。我不确定它是否正确设置了无缓存,但它肯定会阻止不需要的重复查询。这就是你想要使用的。

阅读http://docs.djangoproject.com/en/dev/topics/cache/

答案 2 :(得分:0)

有一种方法可以使用django 1.2

设置“每个站点”缓存

http://docs.djangoproject.com/en/1.2/topics/cache/#the-per-site-cache

答案 3 :(得分:0)

如果您不想让nginx / apache为您完成工作,请查看whitenoise软件包。它会自动对静态文件进行哈希处理,然后在您的静态文件上设置最佳压缩和缓存设置。

如果要在单个动态视图中进行设置(看起来不像您的情况,但可能适合其他访问者):

response = HttpResponse(template.render(context, request))
response['Cache-Control'] = f'max-age={60*60*24}'
return response