Django视图、URL、模版简介
Django视图、URL、模版简介
文章目录
- Django视图、URL、模版简介
- 一、视图
- 1.简介
- 2.使用视图时需要进行两步操作:
- 3.定义视图
- 二、配置URLconf
- 1.查找视图的过程
- 2.URLconf
- 3.需要两步完成URLconf配置:
- 4.url匹配的过程
- 5.请求访问
- 三、模板
- 1.简介
- 2.创建模板
- 3.定义模板
- 4.视图调用模板
- 5.视图调用模板简写
- 四、案例
一、视图
1.简介
- 后台管理页面做好了,接下来就要做公共访问的页面了。当我们刚刚在浏览器中输入http://127.0.0.1:8000/admin/ 之后,浏览器显示出了后台管理的登录页面
- 那有没有同学想过这个服务器是怎么给我们找到这个页面并返回呢?
/admin/是我们想要请求的页面,服务器在收到这个请求之后,就一定对应着一个处理动作,这个处理动作就是帮我们产生页面内容并返回回来,这个过程是由视图来做的。
对于django的设计框架MVT,用户在URL中请求的是视图,视图接收请求后进行处理,并将处理的结果返回给请求者。
2.使用视图时需要进行两步操作:
- 1.定义视图函数
- 2.配置URLconf
3.定义视图
视图就是一个Python函数,被定义在views.py中。
视图的必须有一个参数,一般叫request,视图必须返回HttpResponse对象,HttpResponse中的参数内容会显示在浏览器的页面上
。
打开booktest/views.py文件,定义视图index如下
from django.http import HttpResponsedef index(request):return HttpResponse("index")
二、配置URLconf
1.查找视图的过程
- 请求者在浏览器地址栏中输入url
- 请求到服务器后,获取url信息,然后与编写好的URLconf逐条匹配
- 如果匹配成功则调用对应的视图函数,如果所有的URLconf都没有匹配成功,则返回404错误。
2.URLconf
一条URLconf包括url规则、视图两部分:
url规则使用正则表达式定义。
视图就是在views.py中定义的视图函数。
3.需要两步完成URLconf配置:
url配置的目的是让建立url和视图函数的对应关系。url配置项定义在urlpatterns的列表中,每一个配置项都调用url函数。
- 1.url(正则表达式,视图函数名)
- 2.url(正则表达式,include(应用中的urls文件))
工作中在配置url时,
首先在项目的urls.py文件中添加配置项时,并不写具体的url和视图函数之间的对应关系,而是包含具体应用的urls.py文件,在应用的urls.py文件中写url和视图函数的对应关系
。
在booktest/应用下创建urls.py文件,定义代码如下:
from django.conf.urls import url
from booktest import views
urlpatterns = [url(r'^$', views.index),
]
包含到项目中:打开test1/urls.py文件,为urlpatterns列表增加项如下
:
url(r'^', include('booktest.urls')),
test1/urls.py文件完整代码如下:
from django.conf.urls import include, url
from django.contrib import adminurlpatterns = [url(r'^admin/', include(admin.site.urls)),url(r'^', include('booktest.urls')),
]
4.url匹配的过程
在项目的urls.py文件中包含具体应用的urls.py文件,应用的urls.py文件中写url和视图函数的对应关系。
5.请求访问
视图和URLconf都定义好了,接下来在浏览器地址栏中输入网址:
http://127.0.0.1:8000/
网页显示效果如下图,视图被成功执行了。
三、模板
1.简介
问题 :
如何向请求者返回一个漂亮的页面呢?
- 肯定需要用到html、css,如果想要更炫的效果还要加入js,
- 问题来了,这么一堆字段串全都写到视图中,作为HttpResponse()的参数吗?这样定义就太麻烦了吧,因为定义字符串是不会出任何效果和错误的,
- 如果有一个专门定义前端页面的地方就好了。
- 解决问题的技术来了:
模板
。 - 在Django中,将前端的内容定义在模板中,然后再把模板交给视图调用,各种漂亮、炫酷的效果就出现了。
2.创建模板
为应用booktest下的视图index创建模板index.html,目录结构如下图:
设置查找模板的路径:打开test1/settings.py文件,设置TEMPLATES的DIRS值
'DIRS': [os.path.join(BASE_DIR, 'templates')],
3.定义模板
打开templtes/booktest/index.html文件,定义代码如下
:
<html>
<head><title>图书列表</title>
</head>
<body>
<h1>{{title}}</h1>
{%for i in list%}
{{i}}<br>
{%endfor%}
</body>
</html>
- 在模板中输出变量语法如下,变量可能是从视图中传递过来的,也可能是在模板中定义的。
{{变量名}}
- 在模板中编写代码段语法如下:
{%代码段%}
4.视图调用模板
调用模板分为三步骤:
- 1.找到模板(去模板目录下面获取html文件的内容,得到一个模板对象)
- 2.定义上下文(向模板文件传递数据)
- 3.渲染模板(得到一个标准的html内容)
打开booktst/views.py文件,调用上面定义的模板文件
from django.http import HttpResponse
from django.template import loader,RequestContextdef index(request):# 1.获取模板template=loader.get_template('booktest/index.html')# 2.定义上下文context=RequestContext(request,{'title':'图书列表','list':range(10)})# 3.渲染模板return HttpResponse(template.render(context))
打开浏览器刷新页面,显示效果如下图:
5.视图调用模板简写
视图调用模板都要执行以上三部分,于是Django提供了一个函数render封装了以上代码。 方法render包含3个参数:
- 第一个参数为request对象
- 第二个参数为模板文件路径
- 第三个参数为字典,表示向模板中传递的上下文数据
打开booktst/views.py文件,调用render的代码如下
:
from django.shortcuts import renderdef index(request):context={'title':'图书列表','list':range(10)}return render(request,'booktest/index.html',context)
四、案例
- 定义视图
编写booktest/views.py
文件如下:
from django.shortcuts import render
from booktest.models import BookInfo#首页,展示所有图书
def index(reqeust):#查询所有图书booklist = BookInfo.objects.all()#将图书列表传递到模板中,然后渲染模板return render(reqeust, 'booktest/index.html', {'booklist': booklist})#详细页,接收图书的编号,根据编号查询,再通过关系找到本图书的所有英雄并展示
def detail(reqeust, bid):#根据图书编号对应图书book = BookInfo.objects.get(id=int(bid))#查找book图书中的所有英雄信息heros = book.heroinfo_set.all()#将图书信息传递到模板中,然后渲染模板return render(reqeust, 'booktest/detail.html', {'book':book,'heros':heros})
- 定义URLconf
编写booktest/urls.py
文件如下:
from django.conf.urls import url
#引入视图模块
from booktest import views
urlpatterns = [#配置首页urlurl(r'^$', views.index),#配置详细页url,\d+表示多个数字,小括号用于取值,建议复习下正则表达式url(r'^(\d+)/$',views.detail),
]
- 定义模板
编写templates/booktest/index.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>
编写templates/booktest/detail.html
文件如下:
<html>
<head><title>详细页</title>
</head>
<body>
{#输出图书标题#}
<h1>{{book.btitle}}</h1>
<ul>{#通过关系找到本图书的所有英雄,并遍历#}{%for hero in heros%}{#输出英雄的姓名及描述#}<li>{{hero.hname}}---{{hero.hcomment}}</li>{%endfor%}
</ul>
</body>
</html>
Django视图、URL、模版简介相关推荐
- Django视图之介绍、项目准备、URL、路由命名、reverse反解析和Postman测试
知识点: HttpRequest 位置参数和关键字参数 查询字符串 请求体:表单数据,JSON数据 请求头 HttpResponse HttpResponse JsonResponse redirec ...
- Django之url和视图函数
URL-统一资源定位符(Uniform Resource Locator)用来表示互联网某个资源的地址,类比理解为windows下某个文件的路径.URL的一般语法格式为(注:[]代表其中的内容可省略) ...
- Python基础之 Django视图和 URL 配置
通过上节文章中命令创建项目,然后创建视图文件,配置url,然后启动项目. 1进入相应目录,创建项目命令如下: C:\Windows\system32>f: F:\>cd F:\python ...
- Django之URL路由系统
Django下载安装 (day54) 下载Django pip3 install django== 1.11.9 版本号 创建Django项目 django-admin startproject my ...
- Django视图(三)
Django视图(三) 文章目录 Django视图(三) 一.Cookie 1.简介 2.Cookie的特点 3.设置Cookie 4.读取Cookie 二.Session 1.启用Session 2 ...
- Django视图(一)
Django视图(一) 文章目录 Django视图(一) 一.视图 1.视图简介 2.视图的功能 3.使用视图的过程 4.内置错误视图 二.URLconf 1.配置 2.语法 3.获取值 三.Http ...
- Django 视图URLconf3.1
URLconf 在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对象包括: 正则表达式 视图函数 名称n ...
- python视图函数是什么_python项目Django(视图函数)
一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...
- Django中url匹配规则的补充
Django中url匹配规则是在urls.py文件中配置的. 1.关于正则匹配优先级 在url匹配列表中,如果第一条和第二条同时满足匹配规则,则优先匹配第一条. 在url匹配列表中,如果第一条为正则模 ...
最新文章
- 马斯克连发三推,发布退出OpenAI内情
- 为Pdf批量添加水印
- FastDFS分布式文件系统工作原理
- 浅析Java各种变量线程安全问题
- TextBox获得焦点——客户端JavaScript
- Java 虚拟机对锁优化所做的努力
- HTML5的离线储存
- 超强YOLOP!CVPR 2022领域主席团队开源!全景感知多任务SOTA!
- VB案例:宁越电子琴
- 在ubuntu 16.04中安装source insight 4.0破解版
- Python Logging Handler
- frame.origin和frame.size的心得
- session 分布式处理-----https://segmentfault.com/a/1190000013447750?utm_source=tag-newest
- 公式字符串转换为公式或结果
- 关于keeplive
- 好书推荐 | 2020 年读过的这些好书,建议收藏!
- [Eigen]Eigen的单位矩阵C++
- 政府主办!百万奖金!大厂offer!山东省数据应用创新创业大赛等你来!
- 美团点评2017校园招聘编程题--取红包
- Zookeeper端口和ip修改
热门文章
- 国家文物局:长城沿线群众是文物保护的重要力量
- css背景图根据屏幕大小自动缩放
- docker基础用法
- 我所认识的JavaScript正则表达式
- Async下处理多个异常
- 使用 Apache Lucene 搜索文本——轻松为应用程序构建搜索和索引功能
- 【android】【转】class android.media.MediaPlayer
- 如何使用git for windows上传文件到git仓库
- CodeForces - 1359E Modular Stability(组合数学)
- c语言的运算符表格,C语言教案(运算符和表格达式).ppt