在瀏覽網頁的時候,瀏覽者可能會輸入錯誤的URL,或者訪問的網頁不再存在是很常見的,這種情況下,你一般都會怎么處理呢?
有三種選擇:
重定向到網站的首頁;
顯示無聊的400/403/404/500頁面,并提供一鏈接可鏈接至首頁;
創建一有趣的自定義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')
1
2
3
4
5
6
7
8
9
10
11
12
13
配置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
1
2
3
4
5
6
7
8
9
10
11
12
13
至此,重新運行,輸入錯誤的網址可以看到顯示的是我們創建的自定義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)
本文首發于python黑洞網,博客園同步跟新
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/270629.html
標籤:Python
