В точности следуя приведенному здесь руководству , я не могу создать собственную страницу ошибок 500 или 404. Если я введу неправильный URL-адрес, на странице появится страница с ошибкой по умолчанию. Есть ли что-нибудь, что я должен проверить, чтобы предотвратить отображение настраиваемой страницы?
Каталоги файлов:
mysite/
mysite/
__init__.py
__init__.pyc
settings.py
settings.pyc
urls.py
urls.pyc
wsgi.py
wsgi.pyc
polls/
templates/
admin/
base_site.html
404.html
500.html
polls/
detail.html
index.html
__init__.py
__init__.pyc
admin.py
admin.pyc
models.py
models.pyc
tests.py
urls.py
urls.pyc
view.py
views.pyc
templates/
manage.py
в mysite / settings.py я включил:
DEBUG = False
TEMPLATE_DEBUG = DEBUG
#....
TEMPLATE_DIRS = (
'C:/Users/Me/Django/mysite/templates',
)
в mysite / polls / urls.py:
from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
)
Я могу опубликовать любой другой необходимый код, но что мне следует изменить, чтобы получить настраиваемую страницу с ошибкой 500, если я использую неправильный URL-адрес?
редактировать
РЕШЕНИЕ: у меня был дополнительный
TEMPLATE_DIRS
в моем settings.py, и это вызывало проблему
Ответы:
Под основным
views.py
добавьте свою собственную реализацию следующих двух представлений и просто настройте шаблоны 404.html и 500.html с тем, что вы хотите отобразить.С помощью этого решения не нужно добавлять специальный код в
urls.py
Вот код:
Обновить
handler404
иhandler500
экспортируются строковые конфигурационные переменные Django, найденные вdjango/conf/urls/__init__.py
. Вот почему приведенная выше конфигурация работает.Чтобы вышеуказанная конфигурация работала, вы должны определить следующие переменные в своем
urls.py
файле и указать экспортированные переменные Django на строковый путь Python, в котором определены эти функциональные представления Django, например:Обновление для Django 2.0
Подписи для представлений обработчиков были изменены в Django 2.0: https://docs.djangoproject.com/en/2.0/ref/views/#error-views
Если вы используете представления, как указано выше, handler404 выдаст сообщение:
В таком случае измените свои представления следующим образом:
источник
500 template
не будет отображаться,request.user
потому что он сообщает об ошибке сервера 500, поэтому сервер не может что-либо обслуживать.Официальный ответ:
Вот ссылка на официальную документацию о том, как настроить пользовательские просмотры ошибок:
https://docs.djangoproject.com/en/stable/topics/http/views/#customizing-error-views
Он говорит, что нужно добавить такие строки в ваш URLconf (установка их в другом месте не будет иметь никакого эффекта):
Вы также можете настроить представление ошибок CSRF, изменив настройку
CSRF_FAILURE_VIEW
.Обработчики ошибок по умолчанию:
Это стоит прочитать документацию обработчиков ошибок по умолчанию,
page_not_found
,server_error
,permission_denied
иbad_request
. По умолчанию, они используют эти шаблоны , если они могут их найти, соответственно:404.html
,500.html
,403.html
, и400.html
.Так что, если все, что вам нужно, это сделать красивые страницы с ошибками, просто создайте эти файлы в
TEMPLATE_DIRS
каталоге, вам вообще не нужно редактировать URLConf. Прочтите документацию, чтобы узнать, какие контекстные переменные доступны.В Django 1.10 и более поздних версиях представление ошибок CSRF по умолчанию использует шаблон
403_csrf.html
.Попался:
Не забывайте, что для этого
DEBUG
должно быть установлено значение False, иначе будут использоваться обычные обработчики отладки.источник
Добавьте эти строки в urls.py
urls.py
и реализуем наши пользовательские представления в views.py.
views.py
источник
handler400
только для перезаписиhandler400 = 'myapp.views.bad_request'
?render_to_response
. Из документации: «это не рекомендуется и, скорее всего, в будущем будет прекращено».render_to_response
который будет считаться устаревшим, см. Следующее (используйтеrender
вместо него): stackoverflow.com/questions/44228397/…Со страницы, на которую вы ссылались:
Поэтому я считаю, что вам нужно добавить что-то вроде этого в свой urls.py:
и аналогично для handler500.
источник
urlpatterns = ...
строкой добавьте строку с надписьюhandler500 = 'views.handle500'
, а затем добавьтеdef handle500(request):
в свой views.py, который отображает ваш 500.html.Если все, что вам нужно, это показать пользовательские страницы, на которых есть какие-то необычные сообщения об ошибках для вашего сайта
DEBUG = False
, тогда добавьте два шаблона с именами 404.html и 500.html в свой каталог шаблонов, и он автоматически подберет эти пользовательские страницы при 404 или 500 Поднялся.источник
'DIRS': [os.path.join(BASE_DIR, '<project_name>/templates')]
в вашем списке ШАБЛОНЫ вsettings.py
.В Django 2. * вы можете использовать эту конструкцию в views.py
В settings.py
В urls.py
Обычно я создаю default_app и обрабатываю в нем ошибки на уровне сайта, обработчики контекста.
источник
exception
?locals()
? Файл только показываетpass
.settings.py:
и просто добавить свои
404.html
и500.html
страницы в папке шаблонов. удалить404.html
и500.html
из шаблонов в приложении для опросов.источник
raise Http404('msg')
: stackoverflow.com/a/37109914/895245{{ request_path }}
также доступно.Сделайте ошибку, на странице ошибки узнайте, откуда django загружает шаблоны. Я имею в виду стек путей. В базу template_dir добавьте эти html страницы 500.html , 404.html . Когда возникают эти ошибки, автоматически загружаются соответствующие файлы шаблонов.
Вы также можете добавить страницы для других кодов ошибок, например 400 и 403 .
Надеюсь на эту помощь !!!
источник
В Django
3.x
принятый ответ не будет работать, потому чтоrender_to_response
он был полностью удален, а также были внесены некоторые другие изменения с версии, для которой работал принятый ответ.Есть и другие ответы, но я представляю более чистый ответ:
В вашем основном
urls.py
файле:В
yourapp/views.py
файле:Убедитесь, что вы импортировали
render()
вyourapp/views.py
файл:Боковое примечание:
render_to_response()
устарело в Django2.x
и полностью удалено в версии3.x
.источник
Одной строкой (для общей страницы 404):
источник
Дополнительного просмотра не требуется. https://docs.djangoproject.com/en/3.0/ref/views/
Просто поместите файлы ошибок в корень каталога шаблонов
И он должен использовать вашу страницу с ошибкой, когда отладка имеет значение False
источник
Это работает на django 2.0
Не забудьте добавить свой заказ
404.html
в папку шаблонов приложений.источник
Django 3.0
вот ссылка, как настроить просмотры ошибок
вот ссылка, как визуализировать представление
в
urls.py
(основной, в папке проекта) положить:и в этом приложении (
my_app_name
) введитеviews.py
:ПРИМЕЧАНИЕ:
error/404.html
это путь, если вы помещаете свои файлы в папку шаблонов проектов (а не приложений),templates/errors/404.html
поэтому, пожалуйста, поместите файлы в нужное место и укажите правильный путь.ПРИМЕЧАНИЕ 2: После перезагрузки страницы, если вы все еще видите старый шаблон, измените его
settings.py
DEBUG=True
, сохраните его, а затем сноваFalse
(чтобы перезапустить сервер и собрать новые файлы).источник
DEUB=False
ваши статические файлы могут не обслуживаться, поэтому вы не можете предварительно просмотреть изменения пользовательского шаблона ошибок. Используйте,./manage.py runserver --insecure
чтобы заставить django все равно обслуживать их.Попробуйте переместить шаблоны ошибок в папку
.../Django/mysite/templates/
?Я уверен в этом, но я думаю, что они должны быть «глобальными» для веб-сайта.
источник