Django:我怎么能在开发模式下gzip静态文件?

时间:2011-09-27 22:33:31

标签: django gzip django-staticfiles

我的django.contrib.staticfiles设置似乎没问题,因为所有静态文件都按预期提供。 但是,例如。虽然我打开了GZipMiddleware,但是/static/*.css文件没有被gzip压缩。

据透露。我的观点html实际上确实被gzip压缩,只有staticfiles应用程序提供的文件不。似乎这些反应不是通过中间件链?

4 个答案:

答案 0 :(得分:6)

诀窍是让开发服务器运行'--nostatic'标志设置:./manage.py runserver --nostatic

然后可以使用url模式来提供静态文件,如下所示:

if settings.DEBUG:
    static_pattern = r'^%s(?P<path>.*)$' % (settings.STATIC_URL[1:],)
    urlpatterns += patterns('django.contrib.staticfiles.views',
        url(static_pattern, 'serve', {'show_indexes': True}),
    )

在没有--nostatic的情况下运行时,django将自动在STATIC_URL下提供服务,而无需通过中间件链。

感谢戴夫的指示!

答案 1 :(得分:2)

你可能没有settings.MIDDLEWARE_CLASSES的{​​{3}}吗?这可能会导致奇怪的行为。

如果这是一个生产服务器,你可能根本不应该使用django提供静态文件。我推荐gunicorn和nginx。

编辑:如果不是这样,如果您通过urls.py“手动”提供文件,请使用以下内容:

urlpatterns += staticfiles_urlpatterns() + \
        patterns('',
            (r'^%s/(?P<path>.*)$' % settings.MEDIA_URL.strip('/'), 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
            *[(r'^%s/(?P<path>.*)$' % settings.STATIC_URL.strip('/'), 'django.views.static.serve', {'document_root': path, 'show_indexes': True}) for path in settings.STATICFILES_DIRS]
        )

备选方案#3:Nginx很容易在本地安装,你只需将它指向你的Django服务器(不需要gunicorn / uwsgi /等等)。

答案 2 :(得分:0)

在生产环境中,您的网络服务器(Apache / Nginx / IIS)负责gzipping静态,因此无论gzip是否在dev中工作都无关紧要。

答案 3 :(得分:0)

Carsten 的附加答案 https://stackoverflow.com/a/7673706/8137384

现代版本包含帮助程序:

from django.conf.urls.static import static

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)