7

すべての静的ファイルが期待どおりに提供されるため、私の django.contrib.staticfiles 設定は問題ないようです。しかし、例えば。/static/*.css ファイルが gzip されませんが、GZipMiddleware がオンになっています。

ご参考までに。私のビュー html は実際に gzip されますが、staticfiles アプリによって提供されるファイルのみが圧縮されません。これらの応答はミドルウェア チェーンを通過しないようですか?

4

4 に答える 4

7

秘訣は、「--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 に感謝します。

于 2011-10-06T11:38:41.360 に答える
2

の上部に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 などは必要ありません)。

于 2011-09-27T23:06:14.223 に答える
0

実稼働環境では、Web サーバー (Apache/Nginx/IIS) が静的な gzip を処理するため、gzip が開発環境で機能するかどうかは問題ではありません。

于 2011-09-28T02:22:44.807 に答える
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)
于 2021-04-27T10:03:39.830 に答える