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模板引擎的更多相关文章

  1. Django模板引擎的研究

    Django模板引擎的研究 原创博文,转载请注明出处. 以前曾遇到过错误Reverse for ‘*’ with arguments '()' and keyword arguments' not f ...

  2. 关于Django模板引擎的研究

    原创博文,转载请注明出处. 以前曾遇到过错误Reverse for ‘*’ with arguments '()' and keyword arguments' not found.1其原因是没有给视 ...

  3. django模板引擎自定义变量

    定义临时变量: {% with i=1 %} {{i}} {% endwith %} 定义对临时变量操作的tag 在templatetags中创建set_val.py 内容是 from django ...

  4. django模板语法之include

    假如我们有以下模板index.html,代码为: <!DOCTYPE html> <html lang="en"> <head> <met ...

  5. Django 2.0 学习(13):Django模板继承和静态文件

    Django模板继承和静态文件 模板继承(extend) Django模板引擎中最强大也是最复杂的部分就是模板继承了,模板继承可以让我们创建一个基本的"骨架"模板,它可以包含网页中 ...

  6. Django模板简介

    在settings.py中有个TEMPLATES的设置,其中BACKEND用来配置Django模板引擎, DIRS 定义了一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件 一般我们都会把模 ...

  7. djando模板----第一django模板应用

    Django模板 我们已经知道,模板函数的函数的返回值就是返回给客户端的数据,但如果返回数据很复杂,如果一个非常大的html页面,直接将页面代码固化在python脚本文件中是不合适的,当然 也可以将h ...

  8. Django模板自定义标签和过滤器,模板继承(extend),Django的模型层

    上回精彩回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...

  9. Django基础,Day10 - template 模板引擎与路径设置

    作为一个Web框架,Django需要一个方便的方式来生成动态的HTML.最常见的方法依赖于模板.模板包含所需的HTML输出的静态部分以及一些特殊的语法描述如何插入动态内容. Django框架后端默认支 ...

随机推荐

  1. 第50天学习打卡(CSS 圆角边框 盒子阴影 定位)

    4.4圆角边框 圆角边框:  <!DOCTYPE html> <html lang="en"> <head>     <meta char ...

  2. Pyqt5——表格中隐藏的控件(Model/View/Delegate)

    需求:在TableView表格中点击单元格可以实现编辑功能.性别由LineEdite控件编辑,年龄由spinBox控件编辑. 实现:(1)使用Qt的model-view模式生成表格视图.    (2) ...

  3. DatePicker 多时间粒度选择器组件

    使用方法: 在.vue文件引入 import ruiDatePicker from '@/components/rattenking-dtpicker/rattenking-dtpicker.vue' ...

  4. pytorch(02)tensor的概念以及创建

    二.张量的简介与创建 2.1张量的概念 张量的概念:Tensor 张量是一个多维数组,它是标量.向量.矩阵的高维拓展 Tensor与Variable Variable是torch.autograd(t ...

  5. CSDN博客转MD格式

    基于大神作品修改原文,使用了一下发现有一些小问题,爬取的博客标题如果含有字符是Windows不支持的命名格式,会卡在界面,进行了一下优化,加了一些字符过滤处理,但是tomd模块对html的处理还是不是 ...

  6. 【Azure 微服务】Service Fabric, 使用ARM Template方式来更新SF集群的证书(Renew SF Certificate)

    问题描述 因证书过期导致Service Fabric集群挂掉(升级无法完成,节点不可用)一文中,描述了因为证书过期而导致了SF集群不可用,并且通过命令dd-AzServiceFabricCluster ...

  7. Linux速通05 文件处理与编辑

    使用 cat 命令进行文件的纵向合并 # 例:使用 cat 命令将 baby.age.baby.weight.baby.sex 这三个文件纵向合并为 baby文件 * cat baby.age bab ...

  8. MacOS如何调整JD-GUI反编译工具字体大小

    how to change the fontsize of JD-GUI in MacOS? MacOS如何调整JD-GUI反编译工具字体大小? 问题描述 JD-GUI是一款比较好用的反编译工具,不小 ...

  9. Kilo 使用教程

    写了这么多篇 WireGuard 相关的保姆教程,今天终于牵扯到 Kubernetes 了,不然怎么对得起"云原生"这三个字.如果看到这篇文章的你仍然是个 WireGuard 新手 ...

  10. WS1008网络损伤测试仪

    WS1008网络损伤测试仪具备高性能的网络损伤仿真功能.冗余链路测试功能和线速流量生成功能,提供了综合性的网络系统测试方案,可充分测试.验证网络系统的抗损伤能力.链路切换能力及数据转发能力.为高可靠性 ...