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地址,页面显示如下:
- django视图层进阶
- django视图层
- Django视图与网址进阶
- Django 视图与网址进阶:
- Django学习笔记(11):视图进阶(上)
- Django学习(四)(视图与网址进阶)
- Django 视图层之视图函数(views) 笔记
- Python Django进阶教程(四)(通用视图)
- pythonWeb -- Django开发-视图层开发和URL配置
- django-rest-framework视图层的使用(二)
- Django进阶
- Django进阶
- Django-视图
- 视图层
- Python Django进阶教程(一)(高级视图和URL配置)
- Django admin进阶
- Django 数据模型进阶
- python之类-django进阶
- Java集合类详解
- JavaScript中事件操作和设置事件
- Professional Assembly Language 十二章系统调用例子for mac
- UVALive 4999 Electricity Connection
- 在Action中操作域对象
- django视图层进阶
- C/C++知识要点5——智能指针原理及自定义实现
- (bzoj 1040 [ZJOI2008]骑士)<基环树森林dp>
- GEC210与QXC51用串口通信
- CF245H:Queries for Number of Palindromes(dp & 区间回文串数量)
- 用集合模拟斗地主的洗牌的发牌
- C++知识总结(9)
- Java并发:Callable与Future的应用
- Python OOP容器设计时合理引入列表方法