W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Django 提供了有關(guān)返回 HTTP 錯(cuò)誤代碼的幫助。?HttpResponse
?的子類(lèi)除了200外,還有很多常見(jiàn)的 HTTP 狀態(tài)代碼。返回這些子類(lèi)中某個(gè)子類(lèi)的實(shí)例而不是 ?HttpResponse
?來(lái)表示錯(cuò)誤。比如:
from django.http import HttpResponse, HttpResponseNotFound
def my_view(request):
# ...
if foo:
return HttpResponseNotFound('<h1>Page not found</h1>')
else:
return HttpResponse('<h1>Page was found</h1>')
并不是每個(gè)可用 HTTP 響應(yīng)代碼都有專(zhuān)門(mén)指定的子類(lèi),因?yàn)樗鼈兒芏嗖⒉怀R?jiàn)。然而,如 ?HttpResponse
?文檔中所述的那樣,你也可以將 HTTP 狀態(tài)代碼傳遞給 ?HttpResponse
?的構(gòu)造函數(shù),這樣就可以為任何狀態(tài)代碼創(chuàng)建返回類(lèi)。比如:
from django.http import HttpResponse
def my_view(request):
# ...
# Return a "created" (201) response code.
return HttpResponse(status=201)
因?yàn)?404 錯(cuò)誤是最常見(jiàn)的 HTTP 錯(cuò)誤,這里有更簡(jiǎn)單的方法來(lái)處理這些錯(cuò)誤。
當(dāng)你返回錯(cuò)誤,例如 ?HttpResponseNotFound
?,你需要定義錯(cuò)誤頁(yè)面的 HTML 。
return HttpResponseNotFound('<h1>Page not found</h1>')
為方便起見(jiàn),在你的網(wǎng)站里有個(gè)一致的 404 錯(cuò)誤頁(yè)面是個(gè)好辦法,Django 提供 ?Http404
?異常。如果你在視圖的任何地方引發(fā)了 ?Http404
?,Django 會(huì)捕捉到它并且返回標(biāo)準(zhǔn)的錯(cuò)誤頁(yè)面,連同 HTTP 錯(cuò)誤代碼 404 。
用法示例:
from django.http import Http404
from django.shortcuts import render
from polls.models import Poll
def detail(request, poll_id):
try:
p = Poll.objects.get(pk=poll_id)
except Poll.DoesNotExist:
raise Http404("Poll does not exist")
return render(request, 'polls/detail.html', {'poll': p})
為了在 Django 返回404時(shí)顯示自定義的 HTML,你可以創(chuàng)建名為 404.html 的HTML模板,并將其放置在你的模板樹(shù)頂層。這個(gè)模板將在 DEBUG 設(shè)為 ?False
時(shí)提供。
當(dāng) DEBUG 為 ?True
?時(shí),你可以提供 ?Http404
?信息,并且在標(biāo)準(zhǔn)的 404 調(diào)試模板里顯示。使用這些信息來(lái)調(diào)試;它們通常不適合在生產(chǎn)環(huán)境下的404模板。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: