Django 视图和模板1.4
视图
- 在django中,视图对WEB请求进行回应
- 视图接收reqeust对象作为第一个参数,包含了请求的信息
- 视图就是一个Python函数,被定义在views.py中
#coding:utf-8
from django.http import HttpResponsedef index(request):return HttpResponse("index")
def detail(request,id):return HttpResponse("detail %s" % id)
- 定义完成视图后,需要配置urlconf,否则无法处理请求
URLconf
- 在Django中,定义URLconf包括正则表达式、视图两部分
- Django使用正则表达式匹配请求的URL,一旦匹配成功,则调用应用的视图
- 注意:只匹配路径部分,即除去域名、参数后的字符串
- 在test1/urls.py插入booktest,使主urlconf连接到booktest.urls模块
url(r'^', include('booktest.urls')),
- 在booktest中的urls.py中添加urlconf
from django.conf.urls import url
from . import views
urlpatterns = [url(r'^$', views.index),url(r'^([0-9]+)/$', views.detail),
]
模板
- 模板是html页面,可以根据视图中传递的数据填充值
- 创建模板的目录如下图:
- 修改settings.py文件,设置TEMPLATES的DIRS值
'DIRS': [os.path.join(BASE_DIR, 'templates')],
- 在模板中访问视图传递的数据
{{输出值,可以是变量,也可以是对象.属性}}
{%执行代码段%}
定义index.html模板
<!DOCTYPE html>
<html>
<head><title>首页</title>
</head>
<body>
<h1>图书列表</h1>
<ul>
{%for book in booklist%}
<li><a href="{{book.id}}">{{book.btitle}}</a>
</li>
{%endfor%}
</ul>
</body>
</html>
定义detail.html模板
- 在模板中访问对象成员时,都以属性的方式访问,即方法也不能加括号
<!DOCTYPE html>
<html>
<head><title>详细页</title>
</head>
<body>
<h1>{{book.btitle}}</h1>
<ul>{%for hero in book.heroinfo_set.all%}<li>{{hero.hname}}---{{hero.hcontent}}</li>{%endfor%}
</ul>
</body>
</html>
使用模板
- 编辑views.py文件,在方法中调用模板
from django.http import HttpResponse
from django.template import RequestContext, loader
from models import BookInfodef index(request):booklist = BookInfo.objects.all()template = loader.get_template('booktest/index.html')context = RequestContext(request, {'booklist': booklist})return HttpResponse(template.render(context))def detail(reqeust, id):book = BookInfo.objects.get(pk=id)template = loader.get_template('booktest/detail.html')context = RequestContext(reqeust, {'book': book})return HttpResponse(template.render(context))
去除模板的硬编码
- 在index.html模板中,超链接是硬编码的,此时的请求地址为“127.0.0.1/1/”
<a href="{{book.id}}">
- 看如下情况:将urlconf中详细页改为如下,链接就找不到了
url(r'^book/([0-9]+)/$', views.detail),
- 此时的请求地址应该为“127.0.0.1/book/1/”
- 问题总结:如果在模板中地址硬编码,将来urlconf修改后,地址将失效
- 解决:使用命名的url设置超链接
- 修改test1/urls.py文件,在include中设置namespace
url(r'^admin/', include(admin.site.urls, namespace='booktest')),
- 修改booktest/urls.py文件,设置name
url(r'^book/([0-9]+)/$', views.detail, name="detail"),
- 修改index.html模板中的链接
<a href="{%url 'booktest:detail' book.id%}">
Render简写
- Django提供了函数Render()简化视图调用模板、构造上下文
from django.shortcuts import render
from models import BookInfodef index(reqeust):booklist = BookInfo.objects.all()return render(reqeust, 'booktest/index.html', {'booklist': booklist})def detail(reqeust, id):book = BookInfo.objects.get(pk=id)return render(reqeust, 'booktest/detail.html', {'book': book})
Django 视图和模板1.4相关推荐
- Django视图与模板+vs2019
View视图,负责业务逻辑,并在适当的时候调用Model和Template http请求中产生的两个核心的对象:HttpRequest(http请求),HttpResponse(http响应) req ...
- Django 视图URLconf3.1
URLconf 在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对象包括: 正则表达式 视图函数 名称n ...
- [diango]理解django视图工作原理
前言:正确理解django视图view,模型model,模板的概念及其之间的关联关系,才能快速学习并上手使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 在进入正文之 ...
- Django 笔记4 -- 模板
Django 笔记4 – 模板 Django 系列笔记是笔者学习.实践使用 Django 的相关笔记,大量参考了知了课堂的<Django零基础到项目实战>教程. 参考文档: Django官 ...
- Django框架(23.Django中的模板的标签、变量、过滤器和注释)
模板 作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器.模版致力于表达外观 ...
- Django视图(二)
Django视图(二) 文章目录 Django视图(二) 一.HttpReqeust对象 1.QueryDict对象 2.GET属性 3.POST属性 二.HttpResponse对象 1.属性 2. ...
- Django视图(一)
Django视图(一) 文章目录 Django视图(一) 一.视图 1.视图简介 2.视图的功能 3.使用视图的过程 4.内置错误视图 二.URLconf 1.配置 2.语法 3.获取值 三.Http ...
- Django视图、URL、模版简介
Django视图.URL.模版简介 文章目录 Django视图.URL.模版简介 一.视图 1.简介 2.使用视图时需要进行两步操作: 3.定义视图 二.配置URLconf 1.查找视图的过程 2.U ...
- 修改了模板文件tpl如何立即生效_Views视图与模板
一.概述 用户请求到视图流程: 当有人访问我们django项目的时候 例如127.0.0.1:8000/polls/23,django首先到加载mysite.urls模块 在mysite.urls中发 ...
最新文章
- 没想到我提前56年感受了赛博朋克
- PHP 权威代码风格规范
- java注解大全_java开发注解大全
- python爬虫 单线程的多任务异步协程
- 我是如何走上前端开发这条路 并常年保持一线竞争力的
- 开发指南专题十一:JEECG微云快速开发平台--基础用户权限
- linux修改ip配置文件_协助调试Linux服务器经验分享
- GL-关于intercopany 和intracompany 的个人理解
- android 触摸屏(TP)问题现象分析和解决方法
- ubuntu16.04打造vim和python3的IDE
- css工程师技巧,web前端工程师必须掌握的技巧–CSS Sprites技术(附基础操作教程)...
- 【Cocos2d-Js基础教学(2)类的使用和面向对象】
- 重要知识结构-持续更新中
- 原子结构示意图全部_原子结构示意图知识点总结
- 11种基于ARM的嵌入式操作系统
- 【资料】wod旗帜,纹章
- 将List集合用字符串,逗号隔开进行拼接
- Possible solution: - Disable offline mode and rerun the build
- html textarea 缩放,textarea自动撑开缩放
- Visual and Object Geo-localization: A Comprehensive Survey