3

runserverの使用時に静的ファイルを提供するように Django を構成しようとしています(実稼働は正常に動作します)。アプリディレクトリの下にあるすべての静的ファイルに対して、すべてが正常に機能します。この問題は、特定のアプリの下ではなく、最終的な静的ディレクトリにある静的ファイルで発生します。たとえば、次のプロジェクト構造があります。

/myproject/
/myproject/static/
/myproject/static/css/foo.css
/myproject/app1
/myproject/app1/static/css/bar.css

urls.py
if settings.SERVE_STATIC:
    urlpatterns += patterns('',
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.STATIC_ROOT}),
    )
    urlpatterns += staticfiles_urlpatterns() # one of these may be redundant.

settings.py
SERVE_STATIC = True
PROJECT_ROOT = '/myproject'
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(PROJECT_ROOT, 'static'),)
INSTALLED_APPS = ('app1',)

これらの設定では、次のエラーが表示されます。

ImproperlyConfigured: STATICFILES_DIRS 設定に STATIC_ROOT 設定を含めないでください

これは理にかなっています。Django に静的ファイルを収集し、それらを同じ場所に配置するように指示しています。これにより、ループが発生する可能性があります。

STATICFILES_DIRS 変数をコメントアウトすると、django は静的ファイル 'bar.css' を見つけます。しかし、「foo.css」が見つかりません。

STATIC_ROOT 変数をコメントアウトして STATICFILES_DIRS を元に戻すと、ファイル 'foo.css' が検出されますが、もちろん、'collectstatic' コマンドは機能しなくなります。

注 - 「/static」ディレクトリは空であるはずですが、私が取り組んでいるプロジェクトにはとにかくファイルがあります。:) それらが「collectstatic」によって上書きされない限り、Django runserver がそれらを提供する必要があるように見えますが、そうではありません。

Django runserver を実行しているときに、STATIC_ROOT の下にある静的ファイル (foo.css など) を提供するにはどうすればよいですか?

4

1 に答える 1

5

/static/ にあるファイルを別のディレクトリに移動します。たとえば、/project-static/ とします。

次に、この行のみを urls.py に含めます。

urlpatterns += staticfiles_urlpatterns()

(django.views.static.serve ビューを削除します)

そして、settings.py で、これを使用します。

STATICFILES_DIRS = (os.path.join(PROJECT_ROOT, 'project-static'),)

次に、ファイルシステムの /project-static/ ディレクトリにファイルを配置できます。開発サーバーは /static/ URL プレフィックスからそれらを提供し、本番環境でcollectstaticはそれらを見つけて、Web がアクセスする /static/ ディレクトリに配置します。サーバーはそれらを見つけることができます。

于 2012-09-13T15:49:10.210 に答える