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

TIM*_*MEX 2 python browser django caching http

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

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

Pau*_*ine 12

你可以编写一个自定义中间件(未经测试,从这样的东西开始,看看文档).例如,它可以为一个提供非常静态信息的网站节省大量网络资源,例如彩票结果或历史股票报价.

# 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
Run Code Online (Sandbox Code Playgroud)

将您的中间件附加到settings.py MIDDLEWARE_CLASSES; 中间件就像洋葱层 - 顺序问题,在响应阶段,第一个是最后处理的.

设置CACHE_CONTROL_MAX_AGE或任何其他参数并尝试一下.


Rob*_*ert 2

呃……我会小心的。模板会根据每个请求进行处理。您不想随意将其设置为缓存;数据可以(并且可能会)改变。

值得庆幸的是,Django 提供了缓存。我不确定它是否正确设置了无缓存,但它绝对可以防止不需要的重复查询。这就是您想要使用的。

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