Статические файлы не будут загружаться при отладке в Django - PullRequest
17 голосов
/ 20 июня 2011

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

36 голосов
/ 20 июня 2011

Приложение статических файлов не обслуживает статический носитель автоматически в режиме 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. Что является исключением в этом случае?

EDIT

Так что, если вы все еще хотите обслуживать статические файлы с помощью приложения 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 app docs для получения дополнительной информации. Это просто необходимо, поскольку вы работаете в режиме без отладки.
  • не забудьте from django.conf import settings в вашем urls.py:)
12 голосов
/ 14 сентября 2011

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

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

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

...