Статические файлы не будут загружаться при отладке в 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',
)
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-адрес 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
:)
В Django 1.3, если вы просто тестируете с помощью runserver manage.py, вы можете добавить опцию "--insecure", как описано в документации на staticfiles:
Похоже, что администратор все еще отправляет электронные письма, в которых говорится, что шаблона нет, но он обслуживает статические файлы.
Я не уверен, является ли проблема с электронной почтой преднамеренной или ошибкой