一、MVC (java等其他语言)
MVC代表Model-view-Contorller(模型-视图-控制器)模式
M模型层主要用于对数据库层的封装
V视图层用于向用户展示结果
C控制器用于处理请求、获取数据、返回结果
 
 
二、Django的MTV模式
MTV代表 Model-Template-View(模型-模版-视图)模式
M模型层负责与数据库交互
T模版层负责呈现内容到浏览器
V视图层是核心,负责接收请求、获取数据、返回结果
作用:降低模块间的耦合度(解耦)
 
三、模版层
1.模版是可以根据字典数据动态变化的html网页
模版可以根据视图中传递的字典数据动态生成相应的html网页
 
2.模版配置
创建模版文件夹:项目路径下创建templates文件夹,与manage.py是同级的,可以在templates下创建html文件
在settings.py中TEMPLATES配置
1.BACKEND:指定模版的引擎
2.DIRS:模版的搜索目录(可以是一个或多个)
3.APP_DIRS:是否要在应用中的templates文件中搜索模版文件
4.OPTIONS:有关模版的选项
 
配置项中需要修改的部分
设置DIRS: DIRS':[os.path.join(BASE_DIR,'templates')] #设置模版层的绝对路径,将项目路径(BASE_DIR)+templates 拼接成模版的绝对路径
 
四、模版的加载方式
方案1.通过loader获取模版,通过HttpResponse进行响应
在views导包: from django.template import loader
.使用 loader.get_get_template('html文件名') 加载对应的模版文件 ,html文件名需要是模版下存在的html文件
.使用render()将加载的模版转化成html字符串
.用响应对象将转换的html字符串内容返回给浏览器
然后访问对应的路由地址,就可以访问的对应的html文件
方案2.使用render()直接加载并响应模版
在views导包:from django.shortcuts import render
return render(request,'模版文件名',字典) #第三个参数必须是字典,可有可无
 
 
 
 
五、视图层与模版层之间的交互
1.视图函数可以将python变量封装导字典中传递到模版
示例:
def xxx_view(request):
d = {a:1,b:2}
return render(request,'xxx.html',d)

2.模版中,我们可以用{{变量名}}的语法,调研视图传进来的变量

在视图函数将html页面要使用字典信息传递
在html页面 使用{{key}}的方式调用
 
 
六、模版的变量
视图函数中可以将python变量封装到字典中传递到模版上
能传递到模版中的数据类型很多,必须封装成字典再进行传递
str-字符串 int-整型
list-数组 tuple -元组
dict-字典 func-方法
ojb-类实例化对象
 
 
locals()方法
locals方法可以将当前的局部变量自动生成一个字典
return render(request,'xxx.html',locals() )
在模版中使用变量的语法
{{变量名}}
{{变量名.index}}
{{变量名.key}}
{{对象.方法}}
{{函数名}}
模版中调用变量的时候,如果变量不存在,页面不展示但是不会报错
七、模版层的标签
作用:将一些服务器端端功能嵌入模版中,例如if 、for流程控制等
标签语法,大部分标签需要加结束标签,否则会报错
{% 标签开始 %}
...
{% 结束标签%}
例如if
{% if条件表达式1%} #开始
{% elif条件表达式2%}
{% elif条件表达式3 %}
{% else %}
{% endif %} #结束标签
在if标记中使用实际括号是无效的语法,如果需要指示优先级,则应使用嵌套的if标记
八、模版标签 - if 逻辑练习
写一个简单的计算器页面,能够在服务端进行的简单加减乘除计算,并且计算后保留上一次的记录
PS:前端表单提交action 指向要提交的路由,以/开头
 
 
九、模版标签-for标签
语法
{% for 变量 in 可迭代对象%}
..循环语句
{% empty %}
..可迭代对象为空的时候时候执行
{% endfor %}
 
for标签 内置变量-forloop
for标签 内置变量-forloop

forloop.counter     循环的当前迭代下标从0开始,会输出下标,不会输出内容

forloop.counter0   循环的当前迭代下标从0开始,会输出下标,不会输出内容

forloop.revcounter  counter下标的倒序,会输出下标,不会输出内容

forloop.revcounter0   revcounter下标的倒序,会输出下标,不会输出内容

forloop.first     如果这是第一次循环,则为真

forloop.last         如果这是最后一次循环,则为真

forloop.parentloop .  当嵌套循环 parentloop 表示外层循环

直接在for循环内使用
 
 
示例:
 
 
 
 
 
十、模版过滤器
定义:在变量输出时对变量的值进行处理
作用:可以通过使用过滤器来改变变量的输出显示
语法: {{变量 | 过滤器1:‘参数值1’ |过滤器2:‘参数值2’...}}
 
常用过滤器:
lower :将字符串转换为全部小写
upper:将字符串转换为大写形式
safe:不对变量内的字符串进行html转义
add:"n" 将value的值增加n
truncatechars:"n" 可以截取指定数量的字符,超过指定数量的字符省略,会将html标签字符也计算在内
truncatechars_html:"2":类似truncatechars,只是不会将html标签计算在内
 
 
十一、模版层的继承
html页面模版继承可以使父模版的内容重用,子模版直接继承父模版的全部内容,并可以覆盖模版中相应的块
语法-父模版中:
定义父模版中的块block标签
标识出哪些在子模块时允许被修改的
block标签:在父模版中定义,可以在子模版中覆盖
 
-子模版中
继承模版extends标签(写在模版文件第一行)
例如{% extends '父模版文件名.html'%}
 
子模版重写父模版中的内容块
{% block block_name %} block_name 为自定义标签名,在子模版中通过对应标签名去重写
子模版块用来覆盖父模版中 block_name 块的内容
{% endblock block_name%}
 
使用:
1.在子模版顶部继承 父模版 {% extends 'xxx.html' %}
2.然后打开子模版,全部内容会与父模版
3. 在父模版中的block块,在子模版中同样方法调用可以重写
父模版:
 
子模版:
继承父模版
没有在子模版写block的时候,子模版内容与父模版内容一致
写了父模版的同名block块,代表要重写该块,子模版中该块父模版的内容消失,展示子模版写的内容
没有block的地方,完全与父模版一致,内容继承
模版继承时,服务端的动态传参内容无法继承
 

6.-Django设计模式及模版层的更多相关文章

  1. 63、django之模版层(template)

    上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 模版层(template) 一.模版简介 ...

  2. django之模版层(template)

    上篇主要介绍了django的MTV模型,主要介绍了视图层之路由配置系统url分发和视图层之视图函数view,本篇主要讲解MTV模型中的模版层template. 本篇导论: 模版简介 模版之变量 模版之 ...

  3. 模版层Template layer

    每一个Web框架都需要一种很便利的方法用于动态生成HTML页面. 最常见的做法是使用模板. 模板包含所需HTML页面的静态部分,以及一些特殊的模版语法,用于将动态内容插入静态部分. 说白了,模板层就是 ...

  4. Django--路由层、视图层、模版层

    路由层: 路由匹配 url(正则表达式,视图函数内存地址) 只要正则匹配到了内容,就不再往下匹配,而是直接运行后面的视图函数 匹配首页) url(r'^&', home) 匹配尾页 url(r ...

  5. 03_Django-GET请求和POST请求-设计模式及模板层

    03_Django-GET请求和POST请求-设计模式及模板层 视频:https://www.bilibili.com/video/BV1vK4y1o7jH 博客:https://blog.csdn. ...

  6. Django day05 虚拟环境 django 2.0和django 1.0 路由层区别

    一:虚拟环境 创建虚拟环境一般有三种方式: 1)   File--->New Project--> 出现如下图,点击Project Interpreter:New Virtualenv e ...

  7. Django的日常-模型层(2)

    目录 Django的日常-模型层(2) 几种常用的查询方式 聚合查询 分组查询 F和Q查询 查询优化相关 orm中常见字段 choices参数 orm的事务操作 Django的日常-模型层(2) 几种 ...

  8. Django的日常-模型层(1)

    目录 Django的日常-模型层(1) 模型层 django测试环境 ORM查询 Django的日常-模型层(1) 模型层 模型层其实就是我们应用名下的models.py文件,我们在里面写入想要创建的 ...

  9. Django的日常-路由层

    目录 Django的日常-2 路由层 有名分组和无名分组 反向解析 路由的分发 Django的日常-2 路由层 我们之前已经接触过路由层,只是我们可能不知道他叫这个名字,实际上在Django里面路由层 ...

随机推荐

  1. luoguP4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并 (线段树-权值-动态开点,树链剖分)

    中学毕业了,十七号就要前往武汉报道.中学的终点是武汉大学,人生的终点却不是,最初的热情依然失却,我还是回来看看这分类排版皆惨淡的博客吧,只是是用来保存代码也好.想要换一个新博客,带着之前的经验能把它整 ...

  2. Redis 06 哈希

    参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 哈希就是 ke ...

  3. MybatisPlus——实现多数据源操作

    多数据源 适用:一般工作时候会有多个数据库,每个库对应不同的业务数据.程序如果每次数据都访问同一个数据库,该数据库压力很大访问会很慢. 官方文档:https://baomidou.com/(建议多看看 ...

  4. CF1019B The hat (二分)

    题面 题解 如果位置为i的人与对面的差是x,i+1位置由于只能+1或-1,所以i+1位置与对面的差就是x.x+2或x-2,可以发现,奇偶性不变. 所以只要判断出是奇差,就可以直接输出"! - ...

  5. 【SWIFT】从零开始的SWIFT语言学习笔记-2:简单值、数组与字典

    1.0.3 简单值.数组与字典 知识点: 使用var创建变量 var myVariable = 65 myVariable = myVariable + 1 使用let创建常量 let myConst ...

  6. Linux安装Jenkins及配置svn使用

    目录 1. 下载 2. 创建文件夹 3. 安装 4. 修改端口,不用这步 5. 安装插件提速 6. 启动 7. 页面访问 8. 新建用户 9. 安装Subversion插件 10. 安装maven插件 ...

  7. Docker日常工作常用命令

    容器生命周期管理 Docker创建新容器并运行[run] 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: -a stdin: 指 ...

  8. 安装docker及使用docker安装其他软件(手动挂载数据卷)

    中秋明月,豪门有,贫家也有,极慰人心 Linux安装docker 可以参考官方的安装文档 centos安装docker: https://docs.docker.com/engine/install/ ...

  9. 使用filebeat接收rsyslog的日志

    安装 下载好rpm包后直接安装 curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.7.0-x86_ ...

  10. 编写 bzt 脚本的正确姿势

    这是今年1月24日的旧文,发现没在这里发过,就搬运过来了. 声明 本文讨论的使用场景主要为使用已有的 jmx 脚本,并配合 json 对 jmx 脚本进行部分参数的动态修改. 只补充一些官方文档上没有 ...