Django模板引擎
Django作为Web框架,需要一种很便利的方法动态地生成 HTML 网页,因此有了模板这个概念。模板包含所需 HTML 的部分代码以及一些特殊语法,特殊语法用于描述如何将视图传递的数据动态插入HTML网页中。
Django模板引擎
Django 内置的模板引擎包含模板上下文(亦可称为模板变量)、标签 和 过滤器,各个功能说明如下:
- 模板上下文是以变量的形式写人模板文件里画,变量值由视图函数或视图类传递所得。
- 标签是对模板上下文进行控制输出,比如模板上下文的判断和循环控制等。
- 模板继承隶属于标签,它是将每个模板文件重复的代码抽取出来并写在一个共用的模板文件中,其他模板文件通过继承共用模板文件来实现完整的网页输出。
- 过滤器是对模板上下文进行操作处理,比如模板上下文的内容截取、替换或格式转换等。
1、模板上下文
模板上下文是模板中基本组成单位,上下文的数据由视图函数或视图类传递。它以 {{ variable }} 表示,variable 是上下文的名称,它支持 Python 所有的数据类型,如字典、列表、元组、字符串、整形或实例化对象等。上下文的数据格式不同,在模板里的使用方式也有所差异,如下所示:
# 假如 variable1 = '字符串或整型'
<div>{{ variable1 }}</div>
# 输出 “<div>字符串或整型</div>” # 假如 variable2 = {'name': '字典或实例化对象'}
<div>{{ variable2.name }}</div>
# 输出 “<div>字典或实例化对象</div>” # 假如 variable3 = ['元组或列表']
<div>{{ variable3.0 }}</div>
# 输出 “<div>元组或列表</div>”
2、 Django常用内置标签
标签是对模板上下文进行控制输出,它是以 {% tag %} 表示的,其中tag是标签的名称,Diango内置了许多模板标签,比如 { % if % }(判断标签)、{ % for % }(循环标签)或{ % url % }(路由标签)等。
内置的模板标签可以在 Django 源码(\django\template\defaulttags.py)里找到定义过程,每个内置标签都有功能注释和使用方法,这里本人只列举常用的内置标签,如下表所示:
| 标签 | 描述 |
| { % for % } | 遍历输出上下文的内容 |
| { % if % } | 对上下文进行条件判断 |
| { % csrf_token % } | 生成csrf token的标签,用于防护跨站请求伪造攻击 |
| { % url % } | 引用路由配置的地址,生成相应的路由地址 |
| { % with % } | 将上下文名重新命名 |
| { % load % } | 加载导入Django的标签库 |
| { % static % } | 读取静态资源的文件内容 |
| { % extends xxx % } | 模板继承,xxx为模板文件名,使当前模板继承xxx模板 |
| { % block xxx % } | 重写父类模板的代码 |
3、Django过滤器
过滤器主要是对上下文的内容进行操作处理,如替换、反序和转义等。通过过滤器处理上下文可以将其数据格式或内容转化为我们想要的显示效果,而且相应减少视图的代码量。过滤器的使用方法如下:
{{ variable | filter }}
若上下文设有过滤器,则模板引擎在解析上下文时,首先由过滤器 filter 处理上下文 variable,然后将处理后的结果进行解析并显示在网页上。variable 代表模板上下文,管道符号 "|" 代表当前上下文使用过滤器,filter 代表某个过滤器。单个上下文可以支持多个过滤器同时使用,例如:
{{ variable | filter | lower }}
在使用的过程中,有些过滤器还可以传入参数,但仅支持传入一个参数,带参数的过滤器与参数之间使用冒号隔开,并且两者之间不能留有空格,例如:
{{ variable | date:"D d M Y" }}
Django的内置过滤器可以在源码(\django\template\defaultfilters.py)里找到具体的定义过程,这里本人就不在一一列举。
希望以上内容可以帮助到各位。
Django模板引擎的更多相关文章
- Django模板引擎的研究
Django模板引擎的研究 原创博文,转载请注明出处. 以前曾遇到过错误Reverse for ‘*’ with arguments '()' and keyword arguments' not f ...
- 关于Django模板引擎的研究
原创博文,转载请注明出处. 以前曾遇到过错误Reverse for ‘*’ with arguments '()' and keyword arguments' not found.1其原因是没有给视 ...
- django模板引擎自定义变量
定义临时变量: {% with i=1 %} {{i}} {% endwith %} 定义对临时变量操作的tag 在templatetags中创建set_val.py 内容是 from django ...
- django模板语法之include
假如我们有以下模板index.html,代码为: <!DOCTYPE html> <html lang="en"> <head> <met ...
- Django 2.0 学习(13):Django模板继承和静态文件
Django模板继承和静态文件 模板继承(extend) Django模板引擎中最强大也是最复杂的部分就是模板继承了,模板继承可以让我们创建一个基本的"骨架"模板,它可以包含网页中 ...
- Django模板简介
在settings.py中有个TEMPLATES的设置,其中BACKEND用来配置Django模板引擎, DIRS 定义了一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件 一般我们都会把模 ...
- djando模板----第一django模板应用
Django模板 我们已经知道,模板函数的函数的返回值就是返回给客户端的数据,但如果返回数据很复杂,如果一个非常大的html页面,直接将页面代码固化在python脚本文件中是不合适的,当然 也可以将h ...
- Django模板自定义标签和过滤器,模板继承(extend),Django的模型层
上回精彩回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...
- Django基础,Day10 - template 模板引擎与路径设置
作为一个Web框架,Django需要一个方便的方式来生成动态的HTML.最常见的方法依赖于模板.模板包含所需的HTML输出的静态部分以及一些特殊的语法描述如何插入动态内容. Django框架后端默认支 ...
随机推荐
- macOS启动Kafka
目录 kafka目录结构 先启动zookeeper 后启动kafka 创建topic 创建一个生产者 创建一个消费者 kafka目录结构 # kafka安装目录 /usr/local/Cellar/k ...
- Linux ctrl+z挂起的进程恢复与杀死
Linux系统下,不小心按了ctrl+z命令后,退出了当前进程的执行界面,程序没有结束,只是被挂起了.通过ps命令可以查看进程信息,这里不做详细介绍,可通过jobs命令查看被挂起的进程号 #jobs ...
- CCF(地铁修建):向前星+dijikstra+求a到b所有路径中最长边中的最小值
地铁修建 201703-4 这题就是最短路的一种变形,不是求两点之间的最短路,而是求所有路径中的最长边的最小值. 这里还是使用d数组,但是定义不同了,这里的d[i]就是表示从起点到i的路径中最长边中的 ...
- 追洞小组 | fastjson1.2.24复现+分析
出品|MS08067实验室(www.ms08067.com) 本文作者:爱吃芝士的小葵(Ms08067实验室追洞小组成员) 1.靶场搭建 2.漏洞复现 3.漏洞分析 4.漏洞修复 5.心得 靶场搭建 ...
- Web全段重点整理
1. HTML+CSS 1.1. HTML+CssDay01 1.1.1. 常用普通标签 常用标签如下 div span a p ul+li h1-h6 img 代码示例: <img src= ...
- Java BasicNameValuePair怎么传数组类型的参数?
BasicNameValuePair 传数组的话可以这样传 map.put("ids[]", 1); map.put("ids[]", 2);
- P3388 【模板】割点(割顶) 题解 (Tarjan)
题目链接 P3388 [模板]割点(割顶) 解题思路 最近学的东西太杂了,多写点博客免得自己糊里糊涂的过去了. 这个题求割点,感觉这篇文章写得挺好. 割点是啥?如果去掉这个点之后连通图变成多个不连通图 ...
- Quartz基础使用
Quartz基本组成部分: 调度器:Scheduler 任务:JobDetail 触发器:Trigger,包括SimpleTrigger和CronTrigger . using Quartz; usi ...
- 内存模型与c++中的memory order
概 c++的atomic使用总会配合各种各样的memory order进行使用,memory order控制了执行结果在多核中的可见顺序,,这个可见顺序与代码序不一定一致(第一句代码执行完成的结果不一 ...
- switch case语句,switch case用法详解
switch 是"开关"的意思,它也是一种"选择"语句,但它的用法非常简单.switch 是多分支选择语句.说得通俗点,多分支就是多个 if. 从功能上说,sw ...