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、模版简介相关推荐

  1. Django视图之介绍、项目准备、URL、路由命名、reverse反解析和Postman测试

    知识点: HttpRequest 位置参数和关键字参数 查询字符串 请求体:表单数据,JSON数据 请求头 HttpResponse HttpResponse JsonResponse redirec ...

  2. Django之url和视图函数

    URL-统一资源定位符(Uniform Resource Locator)用来表示互联网某个资源的地址,类比理解为windows下某个文件的路径.URL的一般语法格式为(注:[]代表其中的内容可省略) ...

  3. Python基础之 Django视图和 URL 配置

    通过上节文章中命令创建项目,然后创建视图文件,配置url,然后启动项目. 1进入相应目录,创建项目命令如下: C:\Windows\system32>f: F:\>cd F:\python ...

  4. Django之URL路由系统

    Django下载安装 (day54) 下载Django pip3 install django== 1.11.9 版本号 创建Django项目 django-admin startproject my ...

  5. Django视图(三)

    Django视图(三) 文章目录 Django视图(三) 一.Cookie 1.简介 2.Cookie的特点 3.设置Cookie 4.读取Cookie 二.Session 1.启用Session 2 ...

  6. Django视图(一)

    Django视图(一) 文章目录 Django视图(一) 一.视图 1.视图简介 2.视图的功能 3.使用视图的过程 4.内置错误视图 二.URLconf 1.配置 2.语法 3.获取值 三.Http ...

  7. Django 视图URLconf3.1

    URLconf 在settings.py文件中通过ROOT_URLCONF指定根级url的配置 urlpatterns是一个url()实例的列表 一个url()对象包括: 正则表达式 视图函数 名称n ...

  8. python视图函数是什么_python项目Django(视图函数)

    一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...

  9. Django中url匹配规则的补充

    Django中url匹配规则是在urls.py文件中配置的. 1.关于正则匹配优先级 在url匹配列表中,如果第一条和第二条同时满足匹配规则,则优先匹配第一条. 在url匹配列表中,如果第一条为正则模 ...

最新文章

  1. 马斯克连发三推,发布退出OpenAI内情
  2. 为Pdf批量添加水印
  3. FastDFS分布式文件系统工作原理
  4. 浅析Java各种变量线程安全问题
  5. TextBox获得焦点——客户端JavaScript
  6. Java 虚拟机对锁优化所做的努力
  7. HTML5的离线储存
  8. 超强YOLOP!CVPR 2022领域主席团队开源!全景感知多任务SOTA!
  9. VB案例:宁越电子琴
  10. 在ubuntu 16.04中安装source insight 4.0破解版
  11. Python Logging Handler
  12. frame.origin和frame.size的心得
  13. session 分布式处理-----https://segmentfault.com/a/1190000013447750?utm_source=tag-newest
  14. 公式字符串转换为公式或结果
  15. 关于keeplive
  16. 好书推荐 | 2020 年读过的这些好书,建议收藏!
  17. [Eigen]Eigen的单位矩阵C++
  18. 政府主办!百万奖金!大厂offer!山东省数据应用创新创业大赛等你来!
  19. 美团点评2017校园招聘编程题--取红包
  20. Zookeeper端口和ip修改

热门文章

  1. 国家文物局:长城沿线群众是文物保护的重要力量
  2. css背景图根据屏幕大小自动缩放
  3. docker基础用法
  4. 我所认识的JavaScript正则表达式
  5. Async下处理多个异常
  6. 使用 Apache Lucene 搜索文本——轻松为应用程序构建搜索和索引功能
  7. 【android】【转】class android.media.MediaPlayer
  8. 如何使用git for windows上传文件到git仓库
  9. CodeForces - 1359E Modular Stability(组合数学)
  10. c语言的运算符表格,C语言教案(运算符和表格达式).ppt