Django学习笔记(五)

先在我们来自己布置一个404页面

from django.http import Http404
from django.shortcuts import render
def detail(request, r_id):
    try:
poll=Register.objects.get(pk=r_id)
    except Register.DoesNotExist:
raise Http404
    return render(request,'jobs/detail.html',{'poll':poll})


然后在detail.html中加入{{poll}}即可

http://127.0.0.1:8009/jobs/+一个不存在的id就会引发404错误


一旦我们在视图中使用了render,这时就不再需要导入loader context HttpReponse了

一个更快捷的方式:get_object_or_404

from django.shortcuts import render, get_object_or_404
def detail(request, r_id):
    poll=get_object_or_404(Register,pk=r_id)
    return render(request,'jobs/detail.html',{'poll':poll})


这样子就比上面的代码简易多了,而且出现的效果也是一样的

还有个 get_list_or_404() 函数,与 get_object_or_404() 一样 – 不过执行的是 filter() 而不是 get() 。若返回的是空列表将抛出 Http404 异常。

自己编写404视图

当你在视图中抛出 Http404 时,Django 将载入一个特定的视图来处理 404 错误。Django 会根据你的 root URLconf ( 仅在你的 root URLconf 中;在其他任何地方设置 handler404 都无效 )中设置的 handler404 变量来查找该视图,这个变量是个 Python 包格式字符串 – 和标准 URLconf 中的回调函数格式是一样的。 404 视图本身没有什么特殊性:它就是一个普通的视图。

通常你不必费心去编写 404 视图。若你没有设置 handler404 变量,默认情况下会使用内置的 django.views.defaults.page_not_found() 视图。或者你可以在你的模板目录下的根目录中 创建一个 404.html 模板。当 DEBUG 值是 False ( 在你的 settings 模块中 ) 时, 默认的 404 视图将使用此模板来显示所有的 404 错误。 如果你创建了这个模板,至少添加些如“页面未找到” 的内容。

自己编写500视图

我们重新设置detail.html的页面

<h1>{{ poll.account }}</h1>
<h3>{{ poll.password }}</h3>
<ul>
{% for choice in poll.choice_set.all %}
    <li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>


关于页面中的硬编码:

在index.html中我们有<li><a href="/jobs/{{ register.id }}/">{{ register.account }}</a></li>这样的代码,其中href="/jobs/{{ register.id }}即为硬编码,既然你在 polls.urls 模块中的 url() 函数中定义了 命名参数,那么就可以在 url 配置中使用 {% url %} 模板标记来移除特定的 URL 路径依赖:

<li><a href="{% url 'detail' register.id %}">{{ register.account }}</a></li>

注意:

如果 {% url 'detail' poll.id %} (含引号) 不能运行,但是 {% url detail poll.id %} (不含引号) 却能运行,那么意味着你使用的 Djang 低于 < 1.5 版。这样的话,你需要在模板文件的顶部添加如下的声明::

{% load url from future %}



练习熟练之后下一篇我们来研究一下关于Django的命名空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值