17

Djangoプロジェクトを作成しています。プロジェクトをデバッグから外そうとしましたが、DEBUG = False何らかの理由ですべての静的ファイルが表示されません。それらは500のエラーコードを与えます。これを修正するにはどうすればよいですか?

いくつかのsettings.py:

DEBUG = True
TEMPLATE_DEBUG = DEBUG
...
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
#    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)
4

2 に答える 2

36

DEBUG=False静的ファイルアプリは、モードで静的メディアを自動的に提供していません。差出人django.contrib.staticfiles.urls

# Only append if urlpatterns are empty
if settings.DEBUG and not urlpatterns:
    urlpatterns += staticfiles_urlpatterns()

手動で追加するurlpatternsか、サーバーを使用して静的ファイルを提供することで提供できます(Djangoプロジェクトを非デバッグモードで実行する場合のように)。

私が疑問に思っていることの1つは、なぜ404ではなく500のステータスコード応答を受け取るのかということです。この場合の例外は何ですか?

編集

urls.pyしたがって、staticfilesアプリを介して静的ファイルを提供する場合は、ルートURL conf( )に以下を追加します。

if settings.DEBUG is False:   #if DEBUG is True it will be served automatically
    urlpatterns += patterns('',
            url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
    )

ただし、覚えておく必要のあることがいくつかあります。

  • 実稼働環境ではこれを使用しないでください(静的ファイルのレンダリングは、Webサーバーによって直接提供される代わりにDjangoを経由するため、遅くなります)
  • ほとんどの場合、管理コマンドを使用して静的ファイルをSTATIC_ROOTmanage.py collectstatic)に収集する必要があります。詳細については、staticfilesアプリのドキュメントをご覧ください。非デバッグモードで実行するため、これは単に必要です。
  • あなたの中で忘れないfrom django.conf import settingsでくださいurls.py:)
于 2011-06-20T02:54:36.680 に答える
12

Django 1.3では、manage.py runserverを使用してテストしている場合は、staticfilesのドキュメントで説明されているように、オプション「--insecure」を追加できます。

テンプレートがないことを通知するメールを管理者に送信しているようですが、静的ファイルを提供します。

メールの問題が意図的なものなのかバグなのかわかりません

于 2011-09-14T16:37:49.903 に答える