您好,登錄后才能下訂單哦!
有沒有一種方法可以為Django項目中的每個應(yīng)用程序創(chuàng)建多個自定義錯誤模板,我的意思是,在我的項目中,我有3個應(yīng)用程序,每個應(yīng)用程序?qū)@示3種不同的custom 404錯誤.
現(xiàn)在,我在后臺應(yīng)用程序和前臺顯示相同的404錯誤頁面.
最佳答案
創(chuàng)建一個自定義error view并將其分配給根urls.py中的handler404變量:
from django.views.defaults import page_not_found def my_error_404(request, exception): template_name = '404.html' if request.path.startswith('/backoffice/'): template_name='backoffice/404.html' elif request.path.startswith('/frontoffice/'): template_name='frontoffice/404.html' return page_not_found(request, exception, template_name=template_name)
此代碼適用于Django 1.9.如果使用django< = 1.9,則從視圖中刪除exception參數(shù).
知識點補充:
Django 自定義 404 500 等錯誤頁面
起步
要想自定義錯誤頁面,需要關(guān)閉調(diào)試模式 DEBUG = False ,因為調(diào)試模式的錯誤頁面是開發(fā)下會顯示錯誤信息的。
有兩種方法可以實現(xiàn)自定義的錯誤頁面。
方法一:創(chuàng)建特定命名的模板文件
這是一種非常簡單的方式。在項目模板文件夾 templates 中創(chuàng)建命名為 404.html 的模板文件即可。
這個方式是其實是借用了 Django 的模板查找規(guī)則進行的。源碼在 django.views.defaults.py 中:
ERROR_404_TEMPLATE_NAME = '404.html'
def page_not_found(request, exception, template_name=ERROR_404_TEMPLATE_NAME):
...
總的來說,方法一不需要設(shè)路由,只要新建規(guī)定名稱的模板就能生效了。
方法二:設(shè)置句柄
如果需要更個性化的錯誤頁面,不需要拘泥于特定的模板文件名,可以重新設(shè)置句柄,具體是在 urls.py 中設(shè)置:
# urls.py def page_not_found(request, exception): return render(request, 'your_404_filename.html') handler404 = page_not_found urlpatterns = [ ... ]
除了能捕獲不存在路由地址,還能捕獲視圖中 raise Http404('message')
拋出的異常。
哪些錯誤頁面可以配置
具體能自定義錯誤頁面的有 4 中狀態(tài)碼:
# django.views.defaults.py
ERROR_404_TEMPLATE_NAME = '404.html'
ERROR_403_TEMPLATE_NAME = '403.html'
ERROR_400_TEMPLATE_NAME = '400.html'
ERROR_500_TEMPLATE_NAME = '500.html'# django.conf.urls.__init__.py
handler400 = defaults.bad_request
handler403 = defaults.permission_denied
handler404 = defaults.page_not_found
handler500 = defaults.server_error
總結(jié)
到此這篇關(guān)于python為Django項目上的每個應(yīng)用程序創(chuàng)建不同的自定義404頁面(最佳答案)的文章就介紹到這了,更多相關(guān)python django自定義404頁面內(nèi)容請搜索億速云以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持億速云!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。