当前位置:  开发笔记 > 编程语言 > 正文

关闭Django开发服务器中的静态文件缓存

如何解决《关闭Django开发服务器中的静态文件缓存》经验,为你挑选了4个好方法。

有没有一种简单的方法可以关闭Django开发服务器中的静态文件缓存?

我正在使用标准命令启动服务器:

$ python manage.py runserver

我已经settings.py配置为从/static我的Django项目目录中提供静态文件.我还有一个中间件类,它将Cache-Control头设置must-revalidate, no-cache为开发,但这似乎只会影响不在我的/static目录中的URL .



1> aaronstacy..:

@Erik Forsberg的回答对我有用.这就是我必须做的事情:

从应用注释掉staticfiles INSTALLED_APPSsettings.py:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    #'django.contrib.staticfiles',
)

将我的STATIC_URL变量设置为settings.py:

STATIC_URL = '/static/'

在项目的基础上添加一个条目urls.py:

# static files w/ no-cache headers
url(r'^static/(?P.*)$', 'django.views.static.serve',
    {'document_root': settings.STATIC_ROOT}),

请注意,我还在Cache-Control中间件类中设置标头nocache.py:

class NoCache(object):
    def process_response(self, request, response):
        """
        set the "Cache-Control" header to "must-revalidate, no-cache"
        """
        if request.path.startswith('/static/'):
            response['Cache-Control'] = 'must-revalidate, no-cache'
        return response

然后将其包含在settings.py:

if DEBUG:
    MIDDLEWARE_CLASSES = (
        'django.middleware.common.CommonMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'nocache.NoCache',
    )



2> gitaarik..:

Django的contrib.staticfiles应用程序通过覆盖runserver命令自动为您提供静态文件.使用此配置,您无法控制它为静态文件提供服务的方式.

您可以通过向--nostaticrunserver命令添加选项来阻止staticfiles应用程序提供静态文件:

./manage.py runserver --nostatic

然后你可以编写一个url配置来手动提供带有标头的静态文件,以阻止浏览器缓存响应:

from django.conf import settings
from django.contrib.staticfiles.views import serve as serve_static
from django.views.decorators.cache import never_cache

urlpatterns = patterns('', )

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^static/(?P.*)$', never_cache(serve_static)),
    )

如果您希望manage.py runserver命令--nostatic默认启用该选项,则可以将其放入manage.py:

if '--nostatic' not in sys.argv:
    sys.argv.append('--nostatic')


这是最简单的修复方法.
@rednaw`-nostatic`不起作用.

3> Erik Forsber..:

假设你正在使用django.views.static.serve,它看起来不像 - 但是编写自己的视图只是调用django.views.static.serve,添加Cache-Control标头应该相当容易.



4> Vladislav..:

我的简单解决方案:

from django.contrib.staticfiles.views import serve
from django.views.decorators.cache import never_cache

static_view = never_cache(serve)
urlpatterns += static_view(settings.MEDIA_URL,
                           document_root=settings.MEDIA_ROOT)


嗯.这对我不起作用.我得到这个错误:`TypeError:serve()至少需要2个参数(给定1个)`.也许你打算用'django.conf.urls.static`代替?喜欢:`urlpatterns = static(settings.STATIC_URL,view = never_cache(serve))+ urlpatterns`
推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有