我的django.contrib.staticfiles设置似乎没问题,因为所有静态文件都按预期提供。 但是,例如。虽然我打开了GZipMiddleware,但是/static/*.css文件没有被gzip压缩。
据透露。我的观点html实际上确实被gzip压缩,只有staticfiles应用程序提供的文件不。似乎这些反应不是通过中间件链?
答案 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)