请稍候,加载中....

No.11 404与跳转

访问页面的时候,有时候会看到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页面,而是跳回到原来的列表页面


Python学习手册-