空格名_小白必看!Django 模板语言基础来啦

空格名

Production | CSDN(ID:CSDN新闻)前言

为了实现模板封装和重用的目标,提高HTML接口的调试便利性,并分离前端和后端,Django定义了自己的网络模板语言。目前,

引入模板语言的公文非常完整,几乎涵盖了开发中的知识点和需要注意的问题,但同时,公文中也存在一些问题:

的翻译不够完善,造成阅读困难;

知识点介绍太短,页面中有很多链接,阅读时需要跳转到不同的页面,阅读不连贯。

介绍了基于公文系统的Django模板语言的基本知识点,方便快捷地理解Django模板语言。

模板系统的设计理念

Django的模板系统并不是简单地将Python嵌入到HTML中

它的设计目的是:模板系统被设计用来显示内容,而不是程序逻辑,所以Python没有嵌入到HTML页面中

简而言之,模板只负责呈现数据,大多数逻辑应该移交给视图进行处理

模板简介

模板是一个简单的文本文件它可以生成任何基于文本的格式(如HTML、XML、CSV等)。)除了基本的HTML标签,模板还包含两个额外的元素——变量和标签

模板中包含的变量可以用变量值替换,标签用相应的模板控制逻辑替换。示例:

Django

{ % extensions " base _ generic . html " % }
{ % block title % } { { section . title } } { % end block % }

{ % block content % }

< h1 & gt。{ { section.title } } & lt/h1>。

{ % for story _ list % }

& lt;H2 > 1。

& lta href = " { { story . get _ absolute _ URL } } " gt。

{ { story . headline | upper } }

& lt;/a>。

& lt/h2>。

& ltp>。{ { story . stick |截断单词:" 100 " } } & lt/p>。

{ % end for % }

{ % end block % }

` { { 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后工程男,伪文学青年目前在北京工业大学宇航系学习,我喜欢学习人工智能、网络爬虫、微信小程序和机器人。我酷爱编码,睡觉前必须编码。

大家都在看

相关专题