首页 > 解决方案 > 如何覆盖 Django 中的 handler404 和 handler505 错误?

问题描述

如何覆盖 django 中的 handler404 和 handler505 错误?我已经在我的 settings.py中将DEBUG TRUE更改为 False。

这是我的意见.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/

标签: pythondjango

解决方案


您需要定义一个将exception参数也考虑在内的函数,如以下文档handler404中所述:

handler404

如果没有任何 URL 模式匹配,则应调用的可调用或表示视图的完整 Python 导入路径的字符串。

默认情况下,这是 django.views.defaults.page_not_found()。如果您实现自定义视图,请确保它接受requestexception参数返回一个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)

推荐阅读