Django中创建自定义错误页面(400,403,404,500)

在浏览网页的时候,浏览者可能会输入错误的URL,或者访问的网页不再存在是很常见的。这种情况下,你一般都会怎么处理呢?

有三种选择:

  1. 重定向到网站的首页;
  2. 显示无聊的400/403/404/500页面,并提供一链接可链接至首页;
  3. 创建一有趣的自定义400/403/404/500错误页面。

这篇文章主要介绍在Django中如何自定义错误页面,分为下面四个步骤:

创建自定义错误页面

在项目的templates目录下,创建errors目录,然后在此目录下分别创建好page_400.html,page_403.html,page_404.html,page_500.html。

修改settings.py设置

修改项目目录下的settings.py,设置 DEBUG=False 以及 ALLOWED_HOST=["*"] 。这是因为自定义的错误页面只会在非调试模式下生效。

修改视图

在项目的views.py中,创建如下的错误页面处理方法:

from django.shortcuts import render
 
def bad_request(request):
 return render(request,'errors/page_400.html')

def permission_denied(request):
 return render(request,'errors/page_403.html')
 
def page_not_found(request):
 return render(request,'errors/page_404.html')
 
def server_error(request):
 return render(request,'errors/page_500.html')
配置urls

在项目的urls.py文件中,导入handler400,handler403,handler404,handler500,重新设置错误页面的处理为我们上面views.py里创建的方法:

from . import views
from django.conf.urls import handler400, handler403, handler404, handler500
 
 
urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^myapp/', include('myapp.urls', namespace='myapp')),
] 

handler400 = views.bad_request
handler403 = views.permission_denied
handler404 = views.page_not_found
handler500 = views.server_error

至此,重新运行,输入错误的网址可以看到显示的是我们创建的自定义404页面。

TIPS

若你使用的是Django 2.0版本,则上述会报如下的错误:
“handler404() got an unexpected keyword argument ‘exception’”
这是因为在新版本中内置的错误处理方法签名有更改导致的,具体可以看:https://docs.djangoproject.com/en/2.0/ref/views/#error-views
只需要在修改views.py中代码为:

from django.shortcuts import render
 
def bad_request(request, exception, template_name='errors/page_400.html'):
 return render(request, template_name)

def permission_denied(request, exception, template_name='errors/page_403.html'):
 return render(request, template_name)
 
def page_not_found(request, exception, template_name='errors/page_404.html'):
 return render(request, template_name)
 
def server_error(request, exception, template_name='errors/page_500.html'):
 return render(request, template_name)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Django发生404500错误时,它会自动查找并使用默认的错误页面来响应请求。如果您想自定义这些错误页面,您可以使用以下方法: 1. 在您的templates目录下创建一个名为404.html或500.html的模板文件。例如,要创建自定义404页面,请按照以下步骤操作: - 在您的templates目录下创建一个名为404.html的文件。 - 在404.html文件编写您的404错误页面的HTML代码。例如: ```html <!DOCTYPE html> <html> <head> <title>404 Not Found</title> </head> <body> <h1>404 Not Found</h1> <p>The requested URL was not found on this server.</p> </body> </html> ``` 2. 在您的settings.py文件配置您的自定义错误页面。例如: ```python # your other settings # 404 error page handler404 = 'myapp.views.my_custom_404_view' # 500 error page handler500 = 'myapp.views.my_custom_500_view' ``` 在这个例子,我们配置了handler404和handler500变量,它们分别指向我们自定义404500错误处理视图。这告诉Django,在出现404500错误时,请使用我们自定义错误页面来响应请求。 3. 在您的views.py文件定义您的自定义404500错误处理视图。例如: ```python from django.shortcuts import render def my_custom_404_view(request, exception=None): return render(request, '404.html', status=404) def my_custom_500_view(request): return render(request, '500.html', status=500) ``` 在这个例子,我们定义了两个视图函数,它们分别用于处理404500错误。这些视图函数将渲染我们的自定义错误页面并返回适当的状态码。 注意:如果您只想自定义404500错误页面的一项,只需配置handler404或handler500变量和相应的视图函数即可。 通过这种方式,当Django发生404500错误时,它将使用我们的自定义错误页面来响应请求。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值