python為Django項(xiàng)目上的每個(gè)應(yīng)用程序創(chuàng)建不同的自定義404頁(yè)面(最佳答案)
有沒有一種方法可以為Django項(xiàng)目中的每個(gè)應(yīng)用程序創(chuàng)建多個(gè)自定義錯(cuò)誤模板,我的意思是,在我的項(xiàng)目中,我有3個(gè)應(yīng)用程序,每個(gè)應(yīng)用程序?qū)@示3種不同的custom 404錯(cuò)誤.
現(xiàn)在,我在后臺(tái)應(yīng)用程序和前臺(tái)顯示相同的404錯(cuò)誤頁(yè)面.
最佳答案
創(chuàng)建一個(gè)自定義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ù).
知識(shí)點(diǎn)補(bǔ)充:
Django 自定義 404 500 等錯(cuò)誤頁(yè)面
起步
要想自定義錯(cuò)誤頁(yè)面,需要關(guān)閉調(diào)試模式 DEBUG = False ,因?yàn)檎{(diào)試模式的錯(cuò)誤頁(yè)面是開發(fā)下會(huì)顯示錯(cuò)誤信息的。
有兩種方法可以實(shí)現(xiàn)自定義的錯(cuò)誤頁(yè)面。
方法一:創(chuàng)建特定命名的模板文件
這是一種非常簡(jiǎn)單的方式。在項(xiàng)目模板文件夾 templates 中創(chuàng)建命名為 404.html 的模板文件即可。
這個(gè)方式是其實(shí)是借用了 Django 的模板查找規(guī)則進(jìn)行的。源碼在 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è)置句柄
如果需要更個(gè)性化的錯(cuò)誤頁(yè)面,不需要拘泥于特定的模板文件名,可以重新設(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') 拋出的異常。
哪些錯(cuò)誤頁(yè)面可以配置
具體能自定義錯(cuò)誤頁(yè)面的有 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項(xiàng)目上的每個(gè)應(yīng)用程序創(chuàng)建不同的自定義404頁(yè)面(最佳答案)的文章就介紹到這了,更多相關(guān)python django自定義404頁(yè)面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)的二叉樹算法和kmp算法實(shí)例
最近重溫?cái)?shù)據(jù)結(jié)構(gòu),又用python,所以就用python重新寫了數(shù)據(jù)結(jié)構(gòu)的一些東西,以下是二叉樹的python寫法2014-04-04
找Python安裝目錄,設(shè)置環(huán)境路徑以及在命令行運(yùn)行python腳本實(shí)例
這篇文章主要介紹了找Python安裝目錄,設(shè)置環(huán)境路徑以及在命令行運(yùn)行python腳本實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
python利用tkinter實(shí)現(xiàn)圖片格式轉(zhuǎn)換的示例
這篇文章主要介紹了python利用tkinter實(shí)現(xiàn)圖片格式轉(zhuǎn)換,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-09-09
Python中*args和**kwargs的區(qū)別詳解
這篇文章主要介紹了Python中*args和**kwargs的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
python?管理系統(tǒng)實(shí)現(xiàn)mysql交互的示例代碼
這篇文章主要介紹了python?管理系統(tǒng)實(shí)現(xiàn)mysql交互,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
Python按照l(shuí)ist dict key進(jìn)行排序過程解析
這篇文章主要介紹了Python按照l(shuí)ist dict key進(jìn)行排序過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Python判斷字符串是否包含特定子字符串的多種方法(7種方法)
我們經(jīng)常會(huì)遇這樣一個(gè)需求判斷字符串中是否包含某個(gè)關(guān)鍵詞,也就是特定的子字符串,接下來通過本文給大家分享Python判斷字符串是否包含特定子字符串的多種方法(7種方法),需要的朋友可以參考下2023-03-03
python多進(jìn)程使用函數(shù)封裝實(shí)例
這篇文章主要介紹了python多進(jìn)程使用函數(shù)封裝實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05

