Статические файлы не будут загружаться, если отладка в Django

Я создаю проект 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',
)

Ответ 1

Приложение статических файлов автоматически не служит для статического носителя в режиме DEBUG=False. От django.contrib.staticfiles.urls:

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

Вы можете использовать его, добавив к вашему urlpatterns вручную или использовать сервер для обслуживания статических файлов (например, он должен использоваться при запуске проектов Django в режиме без DEBUG).

Хотя мне интересно, почему вы получаете ответ кода состояния 500 вместо 404. Какое исключение в этом случае?

ИЗМЕНИТЬ

Итак, если вы все еще хотите обслуживать статические файлы через приложение staticfiles, добавьте следующее в свой корневой URL-адрес conf (urls.py):

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}),
    )

Некоторые вещи, которые вы должны иметь в виду:

  • не используйте это в производственной среде (медленнее, поскольку рендеринг статических файлов проходит через Django, а не обслуживается вашим веб-сервером напрямую).
  • Скорее всего, вам нужно использовать команды управления для сбора статических файлов в STATIC_ROOT (manage.py collectstatic). Дополнительную информацию см. В файлах приложений staticfiles. Это просто необходимо, так как вы запускаете режим без отладки.
  • не забывайте from django.conf import settings в urls.py:)

Ответ 2

В Django 1.3, если вы просто тестируете с помощью сервера управления manage.py, вы можете добавить опцию "--insecure", как описано в staticfiles документы:

Кажется, что по-прежнему отправляют электронные письма администратору, говоря, что нет шаблона, но он служит для статических файлов.

Я не уверен, что проблема с электронной почтой специально или ошибка