使用@ StephenPaulger的方法,它也将防止从Django的设置缓存相关的头就像Expires
。如果您正在使用另一个解释这些头文件的系统,并且只要Expires
标题中的日期没有达到,那么在开发过程中这可能会非常烦人。
如果您使用never_cache
,Django会将Expires
标头设置为请求的当前时间,这样文档就会过时。
您可以在您的项目中一个单独的文件创建这样的:
from django.conf import settings
from django.views.decorators.cache import (
cache_page as django_cache_page, never_cache
)
if settings.DEBUG:
cache_func = lambda seconds: never_cache
else:
cache_func = django_cache_page
def cache_page(seconds):
return cache_func(seconds)
然后你就可以代替进口原生Django的一个的这个自定义cache_page
功能,并使用同样的方式。这个if
语句只会在模块导入时执行一次。
如果您有独立的设置文件(用于开发和生产),您甚至可以通过将这些功能放入设置文件中使其更加高效。所以对于开发设置,你这样做:
from django.views.decorators.cache import never_cache
CACHE_FUNC = lambda seconds: never_cache
,并在生产设置你会把:
from django.views.decorators.cache import cache_page
CACHE_FUNC = cache_page
然后,在一个单独的文件在您的项目:
from django.conf import settings
def cache_page(seconds):
return settings.CACHE_FUNC(seconds)
随着这个方法,CACHE_FUNC
在Django的启动过程中只会被定义一次。所以对性能没有影响,并且在开发过程中不需要烦人的Expires
头文件!
正是我所需要的,谢谢。 – 2011-02-25 11:20:26
这是一个不错的方法,但它仍然会设置'Expires'标头,这在某些开发情况下可能会令人讨厌。如果您在检查[我的答案](http://stackoverflow.com/a/21062389/1248175)或[StephenPaulger's](http://stackoverflow.com/a/5094671/1248175)时遇到问题。 – rednaw 2014-01-11 13:06:07