为了实现模板封装和重用的目标,提高HTML接口的调试便利性,并分离前端和后端,Django定义了自己的网络模板语言。目前,
引入模板语言的公文非常完整,几乎涵盖了开发中的知识点和需要注意的问题,但同时,公文中也存在一些问题:
的翻译不够完善,造成阅读困难;
知识点介绍太短,页面中有很多链接,阅读时需要跳转到不同的页面,阅读不连贯。
介绍了基于公文系统的Django模板语言的基本知识点,方便快捷地理解Django模板语言。
模板系统的设计理念
Django的模板系统并不是简单地将Python嵌入到HTML中
它的设计目的是:模板系统被设计用来显示内容,而不是程序逻辑,所以Python没有嵌入到HTML页面中
简而言之,模板只负责呈现数据,大多数逻辑应该移交给视图进行处理
模板简介模板是一个简单的文本文件它可以生成任何基于文本的格式(如HTML、XML、CSV等)。)除了基本的HTML标签,模板还包含两个额外的元素——变量和标签
模板中包含的变量可以用变量值替换,标签用相应的模板控制逻辑替换。示例:
Django` { { section . title } } `在模板渲染时将被变量值替换,for标记可以实现模板的循环渲染< br>
基本语法变量
变量实现模板上下文字典(返回HTTP响应时传递的字典)中的值的输出,这是一个包含键值对的类似dict的对象当模板引擎遇到一个变量时,它会计算该变量并用结果替换它
变量名由字母、数字字符和下划线(“_”)组成,但不能以下划线开头点(“.”)也出现在变量中,表示属性调用。变量名中不允许有空格或标点符号
示例:
Django
我的irstname是{{first _ name}}。mylastname是{{last _ name}}。
当传入上下文字典时` {'first_name': 'John,Last_name': 'Doe'} '将呈现:
django
我的irstname是John。mylastname是doe。
模板中的变量被字典中的值替换
变量也可以使用点符号来查找字典、属性和列表索引:
Django
{ { my _ dictionary . key } }
{ { my _ object . attribute } }
{ { my _ list . 0 } }
点表示法当模板系统遇到点时,它将依次尝试以下操作:
字典查询
2。属性或方法查找
3。数字索引查询
如果结果值是可调用的,那么该值将在没有参数的情况下被调用,并且调用的结果将成为新的模板值
当执行可能覆盖字典查找的操作时,此查找序列可能会导致一些意外行为。例如,如果您尝试循环一个集合。defaultdictionary对象:
Django
{%for k,v in default dictionary . items % }
{其他操作}
{ % end for % }
因为首先进行字典查找,所以items行为将首先提供默认值,而不是使用预期的. items方法在这种情况下,您应该首先考虑使用字典查找,而不是使用字典属性调用。
注意< br>
属性通常被解释为文本字符串,以防止与同名变量冲突例如,{{foo.bar}}中的属性“bar”将被解释为文本字符串,如果模板上下文中存在变量“bar”,则不会使用该变量的值。
以下划线开头的变量属性可能无法访问,因为它们通常被认为是私有的如果
引用了一个不存在的变量,模板系统将插入string_if_invalid选项的值,该选项默认设置为" "(空字符串)。
标签
标签在模板渲染期间提供任意逻辑标签可以输出内容作为控制结构,如“if”语句或“for”循环,从数据库中获取内容,甚至允许访问其他模板标签
(1)标记声明
Django
{ % tag % }
Django
{ % csrf _ token % }
(3)成对使用的标记
某些标记需要开始和结束标记:
Django
{ % if user . is _ authenticated % }您好,{{user{%endif%}
(4)公共标签
for:循环数组中的每个元素。例如,显示列表“运动员列表”中每个元素的“姓名”属性
django
& lt;ul>。< br>
{%运动员在运动员列表% }
& ltli>。{ { sports . name } } & lt;/li>。
{ % endfor % }
& lt/ul>。< br>
if、elif和else:如上,如果运动员列表不为空,则{ {运动员列表|长度}}变量将显示运动员人数
否则,如果运动员_ in _ locker _ room _ list不为空,将显示消息“运动员应该退出……”。如果两个列表都为空,则显示“无运动员”
还可以在if标签中使用过滤器和各种运算符:
Django
{% ifthelete _ list | length > 1%}
团队:{ %运动员列表中的运动员% }...{ % end for % }
{ % else % }
运动员:{ { sporter _ list . 0 . name } }
{ % endif % } < br>
注意
虽然上述示例有效,但请注意大多数模板过滤器会返回字符串,因此使用过滤器进行数学比较通常不会正常工作,长度是个例外
(5)更多
Django有许多内置标签。有关内置标签的更多信息,请参考官方文档:
如果您需要编写自定义标签,请参考官方文档
如果您需要制作所用标签和自定义标签的描述文档,您可以使用Django提供的文档工具。有关详细信息,请参考:
筛选器< br>
简介
筛选器可以对变量执行一些操作,如给变量赋值、更改变量的值等
修改变量显示
过滤器可以修改变量显示例如:
Django
{ { name | lower } }
通过筛选器下部变量{{ name }}更改为小写字符,筛选器通过管道间隔变量和筛选器使用
链调用过滤器一个过滤器
的输出可以用作下一个过滤器的输入
{ { text | escape | line breaks } }是一种常见的转换方法,之后换行符被< p >替换。标签
转换变量和标签参数
过滤转换变量和标签参数值示例:
Django
{ { Django | title } }
Django
用于完善的网络框架
将使用当前日期替换过滤器
my_date的传入参数
注意如果
筛选器参数包含空格和标点符号,则必须用引号“”括起来。例如,要用逗号和空格连接列表,您可以使用{{list|join:"," }}
Django提供了大约60个内置模板过滤器。请参考官方文件:
https://docs。姜戈项目网站/ZH-汉斯/2.2/参考/模板/建筑/参考-模板-建筑-过滤器。
下面列出了一些常见的筛选器:
default
如果变量为false或空,则使用给定的默认值否则,使用变量值例如:
Django
{ { value | default:" nothing " } }
如果未提供“value”或为空,则显示为“` nothing”。"
长度
长度返回值这适用于字符串和列表例如:
Django
{ { value | length } }
如果' value '是'['a ',' b ',' c ',' d']`,那么它将显示为' 4 '
filesizeformat
将该值格式化为“人类可读”的文件大小(即,“13kb”、“4.1 MB”、“102字节”等)。)例如:
Django
{ { value | file size format } }
如果值为123456789,则输出为117.7 MB
如果您需要自定义过滤器,请参考官方文档:
注释示例:
单行注释
Django
{这不会被呈现}
多行注释:{% comment %}和{ % end comment % }
Django
< p & gt。用{{ pub_date|date:"c" }}和lt;呈现文本。/p>。< br>
{%注释"可选注释" % }
& ltp>。用{{ create_date|date:"c" }}和lt;注释掉文本。/p>。
{ % EndComment % }
注意:注释标记不能嵌套
作者简介:山雨,90后工程男,伪文学青年目前在北京工业大学宇航系学习,我喜欢学习人工智能、网络爬虫、微信小程序和机器人。我酷爱编码,睡觉前必须编码。