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. 2021-2-27:Linux 下如何优化 Java MMAP 写入

    主要是调整 pdflush 相关参数. 在linux操作系统中,写操作是异步的,即写操作返回的时候数据并没有真正写到磁盘上,而是先写到了系统cache里,随后由pdflush内核线程将系统中的脏页写到 ...

  2. keras环境搭建

    操作系统 : CentOS7.5.1804_x64 Python 版本 : 3.6.8 keras + tensorflow 环境搭建,使用cpu,安装命令如下: virtualenv -p /usr ...

  3. 使用Groovy构建DSL

    DSL(Domain Specific Language)是针对某一领域,具有受限表达性的一种计算机程序设计语言. 常用于聚焦指定的领域或问题,这就要求 DSL 具备强大的表现力,同时在使用起来要简单 ...

  4. phpMyAdmin Transformation 任意文件包含/远程代码执行漏洞

    漏洞参考 https://yq.aliyun.com/articles/679633 国外提供了一个在线测试的靶场     默认密码  root  toor https://www.vsplate.c ...

  5. Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析

    之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3559AV100 NNIE开发(2)-RFCN(.wk)LoadModel及NNIE Init函数运行过程分析,通过对LoadModel函数及 ...

  6. JS的this指向深入

    this指向深入 this的绑定规则 默认绑定 this默认指向了window 全局环境下this指向了window 函数独立调用,函数内部的this也指向了window <script> ...

  7. 基于CefSharp开发浏览器(九)浏览器历史记录弹窗面板

    一.前言 前两篇文章写的是关于浏览器收藏夹的内容,因为收藏夹的内容不会太多,故采用json格式的文本文件作为收藏夹的存储方式. 关于浏览器历史记录,我个人每天大概会打开百来次网页甚至更多,时间越长历史 ...

  8. vue 仿zTree折叠树

    需求: vue实现仿zTree折叠树,此文章仅作为记录文档. 实现: <template> <div class="line-tree"> <div ...

  9. Xshell(远程)连接不上linux服务器(防火墙介绍)

    一.原因 远程(ssh)连接不上linux服务器的大多数原因都是因为本地服务器的防火墙策略导致的,因此我们想ssh远程能够连接上服务器,有两种方法: 修改防火墙策略 关闭防火墙 二.防火墙服务介绍 1 ...

  10. CMU15-455 Lab2 - task4 Concurrency Index -并发B+树索引算法的实现

    最近在做 CMU-15-445 Database System,lab2 是需要完成一个支持并发操作的B+树,最后一部分的 Task4 是完成并发的索引这里对这部分加锁的思路和完成做一个总结,关于 B ...