在Django中,如何为每个模板渲染自动设置"cache-control"?
我想把缓存控制设置成一个更高的数字,而不是默认的“no-store”,这是Django的默认设置。
我可以以某种方式全局配置它吗?
4 个回答
0
有一种方法可以在Django 1.2中设置“每个网站”的缓存。
http://docs.djangoproject.com/en/1.2/topics/cache/#the-per-site-cache
15
你可以写一个自定义的中间件(这个还没测试过,可以先从这样的代码开始,然后看看文档)。这可以为那些提供比较静态信息的网站节省很多网络资源,比如彩票结果或者历史股票报价之类的。
# 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或者其他参数,然后试试看。
2
嗯……我建议你要小心这个。模板在每次请求时都会被处理。你可不能随便把它设置为缓存;因为数据可能会(而且很可能会)发生变化。
幸运的是,Django提供了缓存功能。我不确定它是否正确设置了不缓存的选项,但它确实能防止不必要的重复查询。这正是你想要使用的。
可以去看看 http://docs.djangoproject.com/en/dev/topics/cache/ 上的内容。