Page not found (404) Request Method: GET Request URL: http://127.0.0.1:8000/blog/about/ Raised by: b

错误:

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/blog/about/
Raised by:  blog.views.about
No BlogPost matches the given query.

解决措施:

def projects(request):
    # use markdown to show projects
    the_projects_post = get_object_or_404(BlogPost, title="projects")
    args = {"projects": the_projects_post}
    return render(request, 'blog/projects.html', args)

当我把代码改成这样时,

def projects(request):
    # # use markdown to show projects
    # the_projects_post = get_object_or_404(BlogPost, title="projects")
    # args = {"projects": the_projects_post}
    # return render(request, 'blog/projects.html', args)
    return HttpResponse('这个页面我也还没写')

It works! 原因就在于,我数据库里还没有名为projects的章,所以,返回404 页面。

get_object_or_404()是个什么玩意儿?Django官方文档之快捷函数
快捷函数是什么呢?快捷函数顾名思义就是用起来很方便,很快捷。
接着,来说下他的用法。

get_object_or_404(klass, *args, **kwargs)
Calls get() on agiven model manager, but it raises Http404 instead of the model’sDoesNotExist exception.

Required arguments

klass A Model class, a Manager, or a QuerySet instance from which to get the object.
**kwargs Lookup parameters, which should be in the format accepted by get() and filter().

get_object_or_404()更有意思的地方在它和try….except…语句等价,所以这就不得了了。省事的不是一点两点。下面我先贴出自己的代码改成try…except..形式。如果运行结果和之前的一样。那我们就能说这俩等价了。

def projects(request):
    # # use markdown to show projects
    # the_projects_post = get_object_or_404(BlogPost, title="projects")
    # args = {"projects": the_projects_post}
    # return render(request, 'blog/projects.html', args)
    try:
        the_projects_post = BlogPost.objects.get(title='projects')
        args = {"projects": the_projects_post}
        return render(request, 'blog/projects.html', args)
    except BlogPost.DoesNotExist:
        return HttpResponse('页面没有找到')

这里写图片描述
所以,看结果,get_object_or_404()和try…except…是等价的。当try中出错后,就直接执行except语句块。所以自然也就看不到‘blog/projects.html’这个页面了。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值