Как переопределить ошибки handler404 и handler505 в django?

#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 и возвращает an HttpResponseNotFound .

Вы можете игнорировать параметр или печатать информацию об исключении в ответе:

 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 объекта, см. Отредактированный ответ.