すべての静的ファイルが期待どおりに提供されるため、私の django.contrib.staticfiles 設定は問題ないようです。しかし、例えば。/static/*.css ファイルが gzip されませんが、GZipMiddleware がオンになっています。
ご参考までに。私のビュー html は実際に gzip されますが、staticfiles アプリによって提供されるファイルのみが圧縮されません。これらの応答はミドルウェア チェーンを通過しないようですか?
すべての静的ファイルが期待どおりに提供されるため、私の django.contrib.staticfiles 設定は問題ないようです。しかし、例えば。/static/*.css ファイルが gzip されませんが、GZipMiddleware がオンになっています。
ご参考までに。私のビュー html は実際に gzip されますが、staticfiles アプリによって提供されるファイルのみが圧縮されません。これらの応答はミドルウェア チェーンを通過しないようですか?
秘訣は、「--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 の下にあるものを自動的に提供します。
指摘してくれた Dave に感謝します。
の上部にGZipMiddlewareがない可能性はありますsettings.MIDDLEWARE_CLASSES
か? それは奇妙な動作を引き起こす可能性があります。
ただし、これが本番サーバーである場合は、おそらく 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 などは必要ありません)。
実稼働環境では、Web サーバー (Apache/Nginx/IIS) が静的な gzip を処理するため、gzip が開発環境で機能するかどうかは問題ではありません。
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)