访问页面的时候,有时候会看到404页面,表示页面不存在,或者要查看的数据不存在,比如现在如果访问 http://127.0.0.1:8000/polls/10,由于不存在这条信息,就会出现报错信息,通过404设置,可以让错误显得更加友好
404错误
使用try
语句捕获DoesNotExist
错误,然后抛出Http404
from django.http import Http404
def detail(request, question_id):
try:
question = Question.objects.get(pk=question_id)
except Question.DoesNotExist:
raise Http404("Question does not exist")
return render(request, 'polls/detail.html', {'question': question})
404快捷方式
from django.shortcuts import get_object_or_404
question = get_object_or_404(Question, pk=question_id)
URL跳转
很多时候,也会用到跳转,比如跳转到自定义的错误页面,或者跳回到某个首页,或者登陆完成跳转到来源页面
跳转使用redirect
函数
from django.shortcuts import redirect
因此detail视图可以修改为:
def detail(request, question_id):
try:
question = Question.objects.get(pk=question_id)
except Question.DoesNotExist:
# raise Http404("Question does not exist")
return redirect("/polls") # 修改为redirect
# question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/detail.html', {'question': question})
此时,就不再显示404页面,而是跳回到原来的列表页面
讨论区