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

Я создаю проект Django. Я только что попытался вывести проект из режима отладки, DEBUG = False и по какой-то причине все мои статические файлы не отображаются. Они дают код ошибки 500. Как мне это исправить?

некоторые из настроек.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',
)

person Nachshon Schwartz    schedule 19.06.2011    source источник
comment
можно поконкретнее какая часть? это довольно долго.   -  person Nachshon Schwartz    schedule 20.06.2011
comment
вы обслуживаете статические файлы через сервер разработки django или свой собственный веб-сервер. Если это сервер разработки, где в ваших URL-адресах вы заботитесь о статических файлах? Вы можете обнаружить, что после отключения DEBUG URL-адреса, связанные с обслуживанием статических файлов, отключаются.   -  person Timmy O'Mahony    schedule 20.06.2011
comment
Я не совсем уверен, где я забочусь о статических файлах, я использую сервер разработки Django. Я думаю, что происходит то, что вы написали, обработка URL-адреса со статическими файлами отключается при отключении DEBUG, есть идеи, что мне делать?   -  person Nachshon Schwartz    schedule 20.06.2011
comment
Вот ответ на повторяющийся вопрос: stackoverflow.com/a/5836728/1224827   -  person Blairg23    schedule 14.12.2017
comment
Возможный дубликат Почему DEBUG=False сделать мой доступ к статическим файлам django невозможным?   -  person Blairg23    schedule 14.12.2017
comment
@ Blairg23, как вопрос 2011 года может быть дубликатом вопроса 2017 года. Должно быть наоборот...   -  person Nachshon Schwartz    schedule 14.12.2017
comment
@Nayish, он говорит, что его спросили в апреле 2011 года, а у вас был июнь 2011 года.   -  person Blairg23    schedule 14.12.2017


Ответы (2)


Приложение статических файлов не обслуживает статические медиафайлы автоматически в режиме 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-адреса (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 :)
person Torsten Engelbrecht    schedule 20.06.2011
comment
Я не уверен, что понимаю, это ответ или вопрос, где та часть, где вы говорите: это то, что вы должны сделать...? - person Nachshon Schwartz; 20.06.2011
comment
Вы можете обслуживать его, добавляя к своим URL-шаблонам вручную, или использовать сервер для обслуживания статических файлов (как это предполагается при запуске проектов Django в режиме без DEBUG). был ответ? Я добавляю пример для вас, если это необходимо, хотя это то же самое, что и предоставление статических файлов до Django 1.3. И да, последний вопрос. Итак, какое исключение возникает, когда дело доходит до этого ответа 500? Просто интересно. - person Torsten Engelbrecht; 20.06.2011
comment
Отлично, это сработало, я просто добавил этот фрагмент кода в свой файл urls.py, и он работает как шарм... спасибо. - person Nachshon Schwartz; 20.06.2011
comment
Мое предположение о 500 заключается в том, что, поскольку DEBUG имеет значение True, django затем пытается отобразить шаблон 404.html, который вызывает ошибку TemplateDoesNotExist, поэтому он пытается затем отобразить шаблон 500.html, которого также не существует, и просто поднимает 500. Можно было бы подумать, что django справится с этой ситуацией лучше, но это не так. - person MrColes; 19.01.2013
comment
Во всяком случае, еще нет. Ожидается, что следующая версия Django (1.5) справится с этим лучше. - person Torsten Engelbrecht; 19.01.2013
comment
Я получал 404, но после добавления шаблона URL отлично работает в apache для Django 1.6.5.... - person Pankaj Anand; 09.02.2015
comment
@PankajAnand по-прежнему рекомендуется обслуживать статические файлы напрямую через apache, а не через Django. По крайней мере, если у вас есть рабочий трафик, работающий с вашим экземпляром, это улучшит производительность. - person Torsten Engelbrecht; 09.02.2015
comment
@TorstenEngelbrecht Да, я согласен, на самом деле уровень Apache звучит лучше для производительности .. - person Pankaj Anand; 09.02.2015
comment
Просто добавьте этот ответ из дублирующего вопроса: stackoverflow.com/a/5836728/1224827 - person Blairg23; 14.12.2017

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

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

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

person duduklein    schedule 14.09.2011
comment
Я могу подтвердить, что это все еще работает для Django 1.5. Спасибо :) - person Caumons; 11.03.2013
comment
благодаря. это было все, что мне нужно в конце концов для моей проблемы. - person The Pied Pipes; 21.04.2014