Я создаю приложение, используя Django в качестве моей рабочей лошадки. До сих пор все было хорошо - заданные настройки БД, настроенные статические каталоги, URL-адреса, представления и т. Д. Но проблемы начали красться в тот момент, когда я захотел отрисовать свои собственные красивые и собственные страницы 404.html и 500.html.
Я прочитал документы по пользовательской обработке ошибок и установил необходимые конфигурации в UrlsConf, создал соответствующие представления и добавил 404.html и 500.html в каталог шаблонов моего приложения (также указанный в settings.py).
Но в документах сказано you can actually view custom error views until Debug is Off
, так что я отключил его, чтобы проверить свои материалы, и вот тут-то и началось безумство!
Я не только не могу просмотреть пользовательский файл 404.html (на самом деле он загружается, но и потому, что каждая из моих страниц с ошибками содержит графическое сообщение об ошибке - как хорошее изображение), источник страницы ошибок загружается, но больше ничего не загружается! Даже не связанные CSS или Javascript!
Как правило, после установки DEBUG = False
загружаются все представления, но любой связанный контент (CSS, Javascript, Изображения и т. Д.) Не загружается! Что происходит? Чего-то не хватает в отношении статических файлов и DEBUG
настроек?
источник
Ответы:
С отключенной отладкой Django больше не будет обрабатывать статические файлы для вас - ваш рабочий веб-сервер (Apache или что-то еще) должен позаботиться об этом.
источник
Если вам все еще нужно локально настроить статический сервер (например, для тестирования без отладки), вы можете запустить devserver в небезопасном режиме:
источник
Вы можете использовать WhiteNoise для обслуживания статических файлов в производстве.
Установка:
И измените ваш файл wsgi.py на это:
И ты в порядке!
Кредит на Руль Творческий Блог .
НО, действительно, не рекомендуется обслуживать статические файлы таким способом в производстве. Ваш производственный веб-сервер (например, nginx) должен позаботиться об этом.
источник
wgsi.py
файл. Документация, на которую вы ссылаетесь, похоже, содержит другие инструкции по использованию WhiteNoise Попробую другие способы и обновлю вас здесь.manage.py runserver --insecure
не работал для меня Этот делает, хотя.'whitenoise.middleware.WhiteNoiseMiddleware'
промежуточное ПО. См. Примечания к выпуску изВ urls.py я добавил эту строку:
Добавьте эти два URL в urlpatterns:
и статические, и мультимедийные файлы были доступны, когда DEBUG = FALSE.
Надеюсь, поможет :)
источник
url(
наre_path(
Если вы используете статическое представление подачи в разработке, вы должны иметь DEBUG = True:
Документы: обслуживание статических файлов в разработке
РЕДАКТИРОВАТЬ: Вы можете добавить некоторые URL-адреса только для проверки ваших 404 и 500 шаблонов, просто используйте общий вид direct_to_template в ваших URL-адресах.
источник
Ответ Джонни великолепен, но он все равно не сработал, просто добавив описанные там строки. Исходя из этого ответа, шаги, которые на самом деле работали для меня, где:
Установите WhiteNoise, как описано:
Создайте
STATIC_ROOT
переменную и добавьте WhiteNoise к вашейMIDDLEWARE
переменной вsettings.py
:Затем измените
wsgi.py
файл, как описано в ответе Джонни:После этого разверните свои изменения на своем сервере (с помощью git или чего-либо еще).
Наконец, запустите
collectstatic
опциюmanage.py
на вашем сервере. Это скопирует все файлы из ваших статических папок вSTATIC_ROOT
каталог, который мы указали ранее:Теперь вы увидите новую папку с
staticfiles
такими элементами.Выполнив следующие действия, вы теперь можете запустить свой сервер и сможете видеть ваши статические файлы в режиме производства.
Обновление: если у вас версия <4, журнал изменений показывает, что больше нет необходимости объявлять файл в
WSGI_APPLICATION = 'projectName.wsgi.application'
вашемsettings.py
файле.источник
На самом деле вы можете работать со статическими файлами в рабочем приложении Django безопасно и без
DEBUG=True
.Вместо использования самого Django, используйте dj_static в вашем файле WSGI ( github ):
источник
Просто откройте свой проект urls.py, а затем найдите выражение if.
Вы можете изменить настройки. Отладка на True, и она будет работать всегда. Но если у вас серьезный проект, подумайте о других решениях, упомянутых выше.
В Django 1.10 вы можете написать так:
источник
Вы можете отладить это разными способами. Вот мой подход.
localsettings.py:
urls.py:
Обязательно прочитайте документы;)
https://docs.djangoproject.com/en/2.0/howto/static-files/#limiting-use-to-debug-true
источник
Поддержка аргументов строкового представления для url () устарела и будет удалена в Django 1.10
Мое решение - просто небольшая поправка к решению Конрадо выше.
источник
Хотя это не безопасно, но вы можете изменить в исходном коде. перейдите к
Python/2.7/site-packages/django/conf/urls/static.py
Затем отредактируйте следующим образом:
Итак, если
settings.debug==False
это не повлияет на код, также после запуска попробуйтеpython manage.py runserver --runserver
запустить статические файлы.ПРИМЕЧАНИЕ : информация должна использоваться только для тестирования
источник
Я внес следующие изменения в свой проект / urls.py, и он работал на меня
Добавьте эту строку: из URL импорта django.conf.urls
и добавьте: url (r '^ media / (? P. *) $', serve, {'document_root': settings.MEDIA_ROOT,}) в urlpatterns.
источник