1. 模板介绍

1.1 模板的功能

产生html,控制页面上展示的内容。模板文件不仅仅是一个html文件。

模板文件包含两部分内容:

静态内容:css、js、html。

动态内容:用于动态去产生一些页面内容。通过模板语言来产生。

1.2 模板文件的使用

通常是在视图函数中使用模板产生html内容返回给客户端。

加载模板文件loader.get_template,获取模板文件的内容,产生一个模板对象。

定义模板上下文RequeseContext,给模板文件传递数据。

模板渲染产生html页面内容render,用传递的数据替换相应的变量,产生一个替换后的标准的html内容。

1.3 模板文件加载顺序

首先去配置的模板目录下面去找模板文件。

去INSTALLED_APPS下面的每个应用的templates去找模板文件,前提是应用中必须有templates文件夹。

2. 模板语言

2.1 变量

模板变量的作用是计算并输出,变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。

语法如下:

{{变量}}

当模版引擎遇到点如book.title,会按照下列顺序解析:

1.字典book['title']

2.先属性后方法,将book当作对象,查找属性title,如果没有再查找方法title()

3.如果是格式为book.0则解析为列表book[0]

如果变量不存在则插入空字符串''。

在模板中调用方法时不能传递参数。

例如:

{{book.btitile}}

首先把book当成一个字典,把btitle当成键名,进行取值book['btitle']。

把book当成一个对象,把btitle当成属性,进行取值book.btitle。

把book当成一个对象,把btitle当成对象的方法,进行取值book.btitle。

例如:

{{book.0}}

首先把book当成一个字典,把0当成键名,进行取值book[0]。

把book当成一个列表,把0当成下标,进行取值book[0]。

如果解析失败,则产出内容时用空字符串填充模板变量。

使用模板变量时,前面的困难是一个字典,可能是一个对象,还可能是一个列表。

2.2 标签

语法如下:

{%代码段%}

for标签语法如下:

{%for item in 列表%}

循环逻辑

{{forloop.counter}}表示当前是第几次循环,从1开始

{%empty%}

列表为空或不存在时执行此逻辑

{%endfor%}

if标签语法如下:

{%if ...%}

逻辑1

{%elif ...%}

逻辑2

{%else%}

逻辑3

{%endif%}

比较运算符如下:

运算符左右两端不能紧挨变量或常量,必须有空格。

==

!=

<

>

<=

>=

布尔运算符如下:

and

or

not

2.3 过滤器

语法如下:

使用管道符号|来应用过滤器,用于进行计算、转换操作,可以使用在变量、标签中。

如果过滤器需要参数,则使用冒号:传递参数。

变量|过滤器:参数

长度length,返回字符串包含字符的个数,或列表、元组、字典的元素个数。

默认值default,如果变量不存在时则返回默认值。

data|default:'默认值'

日期date,用于对日期类型的值进行字符串格式化,常用的格式化字符如下:

Y表示年,格式为4位,y表示两位的年。

m表示月,格式为01,02,12等。

d表示日, 格式为01,02等。

j表示日,格式为1,2等。

H表示时,24进制,h表示12进制的时。

i表示分,为0-59。

s表示秒,为0-59。

value|date:"Y年m月j日 H时i分s秒"

2.4 注释

在模板中使用如下模板注释,这段代码不会被编译,不会输出到客户端; html注释只能注释html内容,不能注释模板语言。

单行注释语法如下:

{#...#}

注释可以包含任何模版代码,有效的或者无效的都可以。

{#{ % if foo % }bar{ % else % } #}

多行注释使用comment标签,语法如下:

{%comment%}

...

{%endcomment%}

3. 模板继承

模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量。

典型应用:网站的头部、尾部信息。

3.1 父模板

如果发现在多个模板中某些内容相同,那就应该把这段内容定义到父模板中。

标签block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同。 为了更好的可读性,建议给endblock标签写上名字,这个名字与对应的block名字相同。父模板中也可以使用上下文中传递过来的数据。

{%block 名称%}

预留区域,可以编写默认内容,也可以没有默认内容

{%endblock 名称%}

3.2 子模板

标签extends:继承,写在子模板文件的第一行。

{% extends "父模板路径"%}

子模版不用填充父模版中的所有预留区域,如果子模版没有填充,则使用父模版定义的默认值。

填充父模板中指定名称的预留区域。

{%block 名称%}

实际填充内容

{{block.super}}用于获取父模板中block的内容

{%endblock 名称%}

4. HTML转义

模板对所有传递的文字进行输出时,合并以下字符自动转义。

小于号< 转换为 <

大于号> 转换为 >

单引号' 转换为 '

双引号" 转换为 "

与符号& 转换为 &

过滤器escape可以实现对变量的html转义,默认模板就会转义,一般省略。

{{t1|escape}}

过滤器safe:局部转义,告诉模板这个变量是安全的,可以解释执行。

{{data|safe}}

标签autoescape:设置一段代码都局部转义,接受on,off参数。

{%autoescape off%}

...

{%endautoescape%}

模板硬编码中的字符串默认不会经过转义,如果需要转义,那需要手动进行转义。

html语言可以写模版继承吗,Django框架(十一):模板介绍、模板语言、模板继承、HTML转义...相关推荐

  1. 单片机红外线c语言,自己写的51单片机的红外线遥控接收程序(C语言)

    自己写的51单片机的红外线遥控接收程序(C语言) (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 //51单片机做的红外遥控实验(C ...

  2. Django框架之入门介绍

    Python下有许多款不同的Web框架.Django(发音:[`dʒæŋɡəʊ]) 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于Django. 作为Python最重要的框架之一,Dja ...

  3. Django框架学习20--模板变量,模板标签,模板过滤器及自定义模板过滤器,自定义模板标签

    1.模板变量 string 字符串和 int 类型,通过key名称直接取值,如:{{ n_name }} list类型的取值,通过点下班取值,如:{{ fancy.0 }}.{{ fancy.1 }} ...

  4. html语言可以写模版继承吗,16-Django的模板语言(变量,标签,过滤器,继承,html转义)...

    模板语言 模板语言简称为DTL(Django Template Language) 模板变量 模板变量名由数字,字母,下划线和点组成,不能以下划线开头. 使用:{{模板变量名}} def index2 ...

  5. c语言强制写注册表,:注册表的认识以及用c语言编写一个“百分之一熊猫烧香”...

    众所周知,熊猫烧香是一个威力强大的病毒.曾经的电脑只要被感染以后就只有重装系统这条路. 当然,现在可能对这种病毒已经有所防御,所以威胁没有以前那么大了. 熊猫烧香一个比较明显的特点就是会感染所有exe ...

  6. c语言怎么写出2次元方程,三次樣条C语言的实现.doc

    三次樣条C语言的实现 实验二 .三次样条C语言的实现 1.实验目的: 进一步熟悉三次样条插值法. 掌握编程语言字符处理程序的设计和调试技术. 2.实验要求: 已知:某些点的坐标以及初值条件. 输入:条 ...

  7. Django MVT详细说明(三)模板T

    模板使用 一.模板介绍 1,作为Web框架,Django提供了模板,可以很便利的动态生成HTML 2,模版系统致力于表达外观,而不是程序逻辑 3,模板的设计实现了业务逻辑(view)与显示内容(tem ...

  8. python django框架分析_Django框架模型简单介绍与使用分析

    本文实例讲述了Django框架模型简单介绍与使用.分享给大家供大家参考,具体如下: ORM介绍 ORM Object relational mapping 对象关系映射 把面向对象中的类和数据库表一一 ...

  9. Django框架的基本应用

    1. Django框架的基本介绍 Django是一个开放源代码的Web应用框架,由Python语言写成,采用了MVT的框架模式,即模型M.视图V和模板T. MVT全名是ModelViewTemplat ...

最新文章

  1. 距离传感器控制灯泡代码_如何使用颜色传感器和超声波传感器检测障碍物和避障...
  2. Centos7.5.1804永久生效修改主机名
  3. java杰森_java – 杰克逊杰森Mapper:没有场或空场?
  4. Acwing第 27 场周赛【完结】
  5. java listfiles 使用_Java中list()和listFiles()方法之间的区别
  6. Scala 数组详解
  7. 超图iserver登录密码忘记,重置密码
  8. matlab的czt变换,CZT变换(chirp z-transform)
  9. 20-172-040-安装-Flink单机安装 flink-1.7.2-bin-hadoop27-scala_2.11
  10. Java 质数输出的经典算法题面试可以用
  11. iOS -一些常用的方法
  12. 视频教程-CCNA之TCP/IP协议栈精讲-思科认证
  13. ASCII码表对照图
  14. mysql用alter创建外键_MySQL入门(alter语法 与 外键)
  15. DWF是个什么格式,要怎么进行相应的格式转换?
  16. cherry G80-3000茶轴空格左边失灵,经常无法触发按钮,安装空格卫星轴零件
  17. CTU Open Contest 2019 -A-Beer Barrels
  18. openpose handpose 人体关键点识别 关键点检测
  19. 「第二部:容器和微服务架构」(2) 容器化单体应用
  20. [OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js提供了一个完整的基于Web的医学成像平台。...

热门文章

  1. Shadow Properties之美(二)【Microsoft Entity Framework Core随笔】
  2. 大部分Intel hardware intrinsic 将在 .NET Core 2.1 中启用
  3. 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
  4. ASP.NET Core开发-Docker部署运行
  5. 【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端
  6. 【BIM入门实战】Win11平台上Revit 2018_x64简体中文版图文安装与卸载完整教程
  7. 【ArcGIS Pro微课1000例】0010:ArcGIS Pro导入ArcMap样式符号库——以国土三调样式为例
  8. 【MATLAB统计分析与应用100例】案例018:matlab读取Excel数据,进行K均值聚类分析
  9. Android之提示Method return type must not include a type variable or wildcard:
  10. 最大尺寸分辨率_未来就在眼前——视涯科技推出最高分辨率硅基OLED显示屏幕...