#python #django
#python #django
Вопрос:
Как мне переопределить ошибки handler404 и handler505 в django? я уже меняю значение DEBUG TRUE на False в своем settings.py .
это мой views.py
def Errorhandler404(request):
return render(request, 'customAdmin/my_custom_page_not_found_view.html', status=404)
def Errorhandler500(request):
return render(request, 'customAdmin/my_custom_error_view.html', status=500)
это мой urls.py
handler404 = customAdmin.views.Errorhandler404
handler500 = customAdmin.views.Errorhandler500
urlpatterns = [
.....
]
это ошибка
это документация, которой я следую
https://micropyramid.com/blog/handling-custom-error-pages-in-django/
Комментарии:
1. Если это все, что делают ваши пользовательские обработчики ошибок, тогда было бы проще переименовать ваши шаблоны ошибок в
404.html
и 500.html обработчик. That way, Django will use your custom templates, and you don't need to set
404` илиhandler500
.
Ответ №1:
Вам необходимо определить функцию, которая exception
также учитывает параметр, как указано в документации по handler404
:
handler404
Вызываемый объект или строка, представляющая полный путь импорта Python к представлению, который должен быть вызван, если ни один из шаблонов URL не совпадает.
По умолчанию это django.views.defaults.page_not_found() . Если вы реализуете пользовательское представление, убедитесь, что оно принимает
request
аргументы иexception
и возвращает anHttpResponseNotFound
.
Вы можете игнорировать параметр или печатать информацию об исключении в ответе:
def Errorhandler404(request, exception):
return render(request, 'customAdmin/my_custom_page_not_found_view.html', status=404)
def Errorhandler500(request):
return render(request, 'customAdmin/my_custom_error_view.html', status=500)
Обычно ErrorHandler404
должен возвращаться HttpResponseNotFound
ответ [Django-doc]:
from django.http import HttpResponseNotFound
from django.template import loader
def Errorhandler404(request, exception):
content = loader.render_to_string('customAdmin/my_custom_page_not_found_view.html', {}, request)
return HttpResponseNotFound(content)
ErrorHandler500
Должен быть возвращен HttpResponseServerError
объект [Django-doc]:
from django.http import HttpResponseServerError
from django.template import loader
def Errorhandler500(request):
content = loader.render_to_string('customAdmin/my_custom_page_not_found_view.html', {}, request)
return HttpResponseServerError(content)
Комментарии:
1. ?: (urls.E007) Пользовательский вид handler500 ‘customAdmin.views. Errorhandler500’ не принимает правильное количество аргументов (запрос).
2. @marvin: да, это всего лишь обработчик 404 :).
3. как насчет обработчика 500?
4. @marvin: для этого требуется только
request
. Но обе функции должны отвечать другими объектами, кромеHttpResponse
объекта, см. Отредактированный ответ.