django视图层进阶

来源:互联网 发布:淘宝店招设计效果图 编辑:程序博客网 时间:2024/06/10 20:58

拥有真实能力的视图

接下来,我们在项目根目录下添加templates文件夹,并在templates文件夹下创建blogpost文件夹,再在blogpost文件夹下建立index.html 文件:
这里写图片描述
index.html 中写入如下代码:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>{{ post.title }}</title></head><body><h1>{{ post.title }}</h1>  <em>{{ post.category }}</em><p>{{ post.content }}</p></body></html>

templates是我们的模板,要让django找到我们的模板,需要在blog/settings.py 模块中TEMPLATES 配置的'DIR':[] 中添加 os.path.join(BASE_DIR, 'templates'),表示在项目的根目录下查找templates 文件夹。

TEMPLATES = [    {        'BACKEND': 'django.template.backends.django.DjangoTemplates',        'DIRS': [os.path.join(BASE_DIR, 'templates')],

blogpost/views.py 模块中编写如下代码:

from django.shortcuts import renderfrom django.http import HttpResponsefrom .models import Blogdef index(request):    post = Blog.objects.all()[0]    return render(request, 'blogpost/index.html', {'post': post})

render 方法的第一个参数封装好了HTTP的请求,第二参数是所要使用的模板,第三参数是一个字典。它将从数据库中取出的数据传递给模板。

打开浏览器输入网址http://127.0.0.1:8000/blog/:

这里写图片描述

浏览器返回我们从数据库中取到的博客内容。


带参数的视图

首先进入后台,添加几条博客内容:
这里写图片描述

views.py 模块中添加一个视图函数detail()

def detail(request, id):    post = Blog.objects.get(pk=id)    return render(request, 'blogpost/index.html', {'post': post})

接着在blogpost/urls.py 模块中添加URLconf:

urlpatterns = [    url(r'^detail/(?P<id>[0-9]+)/$', views.detail, name='detail'), # 添加代码    url(r'^$', views.index, name='index'),]

这里的url模式匹配表示,在detail/ 后至少跟一位数字,例如:detail/2/detail/6/ 都是正确的。(?P<id>[0-9]+) 部分表示捕获文本,它相当于上面例子中 id=2或6 ,django通过浏览器捕获用户输入的参数,再将参数传递给视图函数,视图函数中的参数id 可以看做是def detail(request, id=2)。打开浏览区输入如下地址:http://127.0.0.1:8000/blog/detail/3/(其中detail后的数字随意输入,但要保证文章id存在)。

这里写图片描述


404错误处理

在上面的例子中,我们如果在detail/ 后输入一个不存在的id 值,浏览器将会爆出一堆错误,这非常影响我们的用户体验,因此,需要对页面异常进行捕获,
这里写图片描述
打开blogpost/views.py 模块,修改代码:

def detail(request, id):    #post = Blog.objects.get(pk=id)    post = get_object_or_404(Blog, pk=id)    return render(request, 'blogpost/detail.html', {'post': post})

get_object_or_404 是django捕获404异常页面的快捷方式,再次打开浏览器输入不存在的id地址,页面显示如下:
这里写图片描述

原创粉丝点击