一、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. ThreadLocal for Golang

    背景 由于官方不支持 ThreadLocal,在业务中传参经常需要传递 context,造成参数混乱,开发效率低下,跨方法实现传参变得困难. 需要解决的核心问题: 1. 数据存储,g.labels u ...

  2. .net core + eureka + spring boot 服务注册与调用

    .net core + eureka + spring boot 服务注册与简单的调用 假期小长假遇上疫情只能去家里蹲了,刚好有时间总结一下. 概述 微服务架构是当前比较火的分布式架构,本篇基于.ne ...

  3. .Net Core&RabbitMQ死信队列

    过期时间 RabbitMQ可以为消息和队列设置过期时间Time To Live(TTL).其目的即过期. 消息过期时间 消息存储在队列中时,如果想为其设置一个有限的生命周期,而不是一直存储着,可以为其 ...

  4. OpenJudge 1.5.15 银行利息

    15:银行利息 总时间限制: 1000ms 内存限制: 65536kB 描述 农夫约翰在去年赚了一大笔钱!他想要把这些钱用于投资,并对自己能得到多少收益感到好奇.已知投资的复合年利率为R(0到20之间 ...

  5. Linux 更换国内源

    1.事件背景 事情起因是因为我想安装xvfb,执行sudo apt-get install xvfb发现安装报错,看报错原因是被墙导致,因为我用的默认源也没有挂代理:然后就百度,发现都是互相抄,什么换 ...

  6. 第十章 Kubernetes的CNI网络插件--flannel

    1.简介 1.1前言 Kubernetes设计了网络模型,但却将它的实现讲给了网络插件,CNI网络插件最重要的功能就是实现Pod资源能够跨主机通信 常见的CNI网络插件如下: Flannel: Cac ...

  7. KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析

    ​ 案例说明: KingbaseES V8R3集群failover时两个cluster都会触发,但只有一个cluster会调用脚本去执行真正的切换流程,另一个有对应的打印,但不会调用脚本,只是走相关的 ...

  8. 如何充分利用KingbaseES日志

    作为现代关系数据库中,KingbaseES带有许多用于微调的参数.需要考虑的领域之一是KingbaseES应该如何记录其活动.日志记录在Kingbases数据库管理中经常被忽略,如果不被忽略,通常会被 ...

  9. java的数据类型分为两大类

    java的数据类型分为两大类 基本类型(primitive type) 数据类型 整数类型 byte占一个字节范围:-128-127 short占两个字节范围:-32768-32767 int占四个字 ...

  10. Sublime Text简单使用方法

    一.新建和保存文件 一.点击文件,选择新建文件或者快捷键Ctrl+N 二.另存文件,选择保存位置,这里项目的命名以.py为后缀 二.保存代码 快捷键Ctrl+S,上方文字出现小圆点表示未保存 三.运行 ...