Django не может найти статические файлы с Debug=False и разрешенными хостами

Привет всем, у меня возникли проблемы с решением этой проблемы: если я превращаю DEBUG в False, я не могу запустить manage.py runserver:

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False

тогда, допустим, я добавлю что-то в ALLOWED_HOSTS:

ALLOWED_HOSTS = ['*']
or
ALLOWED_HOSTS = ['localhost']
or
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

теперь, я могу сделать manage.py runserver, но статические файлы не работают. Странный.

Если я превращаю DEBUG в True, то он работает с ALLOWED_HOSTS, установленным в nothing, в localhost или в *. Итак, я думаю, проблема связана с DEBUG. Я ничего не понимаю.

3 ответов


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

обслуживание файлов

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

во время разработки, если вы используете django.ВНО.staticfiles, это будет сделано автоматически runserver, когда DEBUG имеет значение True (см. django.ВНО.staticfiles.просмотр.служить.))(

этот метод крайне неэффективен и, вероятно, небезопасен, поэтому он непригоден для производства.

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

проверить здесь, чтобы узнать как обслуживать статические файлы в производство.

EDIT: добавление следующего ответа @alejoss вопрос о просмотре страниц ошибок с DEBUG=True.

я добавил что-то вроде следующего в моем корневом :

if settings.DEBUG:
    urlpatterns += patterns(
        '',
        url(r'^400/$', TemplateView.as_view(template_name='400.html')),
        url(r'^403/$', TemplateView.as_view(template_name='403.html')),
        url(r'^404/$', 'django.views.defaults.page_not_found'),
        url(r'^500/$', 'django.views.defaults.server_error'),
    )

возможно, вам придется немного изменить (т. е. 400 и 403 страницы, возможно, придется редактировать, если ваши имена шаблонов отличаются). В принципе, это позволяет вам посетить http://localhost/400 посмотреть свой 400 страница ошибки, http://localhost/403 посмотреть свой 403 страница ошибок и так далее.


Если вам все еще нужен статический сервер локально (например, для тестирования без отладки), вы можете запустить devserver в небезопасном режиме:

manage.py runserver --insecure

хорошо, вот очень чистое решение. вам нужно использовать

DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = True

таким образом, в ваших журналах вы можете увидеть, что тогда проблема. Whitenoise возвращает 500 обычно, когда отсутствует какой-либо файл.

вы можете увидеть, что отсутствует в ваших журналах. В моем случае журналов heroku было достаточно.

для получения дополнительной информации: https://docs.djangoproject.com/en/2.0/ref/settings/#debug-propagate-exceptions