[Flask][09]Jinja2模板设计文档——表达式

版权声明

本文出自 “ 幻冥极地 ” 博客 ,作者 小貘 采用 署名-非商业性使用-相同方式共享 协议。转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
https://www.moorehy.com/archives/234

Jinja 允许基本表达式在任何地方使用。这非常类似于 Python ;即使您不使用 Python ,您也应该感到很自然。

文字 (Literals)

文字是表达式的最简单形式。对于 Python 对象来说,文字(Literals)的表示为字符串和数字。存在以下文字:

“Hello World”:
两个双引号或单引号间的所有内容称为一个字符串。这在模板中需要一个字符串时非常有用(例如:作为函数调用或过滤器的参数,或者只是用于扩展(extend)或包含(include)模板)。
42 / 42.23:
整数和浮点数是通过写下数字创建的。如果存在一个小数点,那么该数字为浮点数,否则为整数。
[‘list’, ‘of’, ‘objects’]:
两个方括号间的所有内容称为一个列表。列表对于存储用来迭代的序列数据非常有用。例如:您可以很容易的使用列表(list)和元组(tuple)为一个 for 循环创建一组链接序列:

(‘tuple’, ‘of’, ‘values’):
元组就像不能修改的列表(“immutable”)。如果一个元组仅包含一个条目,后面必须跟一个逗号( ('1-tuple',) )。元组通常用于表示两个或多个元素的条目。更多详细信息,请参阅上面列表的示例。
{‘dict’: ‘of’, ‘key’: ‘and’, ‘value’: ‘pairs’}:
Python 中的字典(dict)是一种结合键(key)和值(value)得结构。键必须是唯一的,并且始终只有一个值。字典很少在模板中使用;仅在某些罕见的情况下非常有用,比如 xmlattr() 过滤器。
true / false:
true 就是对, false 就是错。

注意

特殊常量 true , falsenone 都是小写的。因为这曾经造成了混乱,( True 被用于扩展为一个被认为是 false 的未定义变量(undefined variable))。他们现在也可以被写成首字母大写的格式( True, FalseNone )。但是为了一致性,(所有的 Jinja 标识符都是小写的)您应该使用小写版本。

数学 (Math)

Jinja 允许您使用数值计算。这在模板中很少使用,仅为了完整性而存在。支持以下运算符:

+
俩对象求和。通常对象为数字,但如果两者都为字符串或列表,您可以使用这种方式来拼接他们。但这不是拼接字符串的首选方式!为实现字符串拼接,请查看 ~ 运算符。 {{ 1 + 1 }} 结果为 2
-
从第一个数中减去第二个数。 {{ 3 - 2 }} 结果为 1
/
两数相除。返回值将是浮点数。 {{ 1 / 2 }} 结果为 {{ 0.5 }} 。(就像 from __future__ import division 。)
//
两书相除并且返回结果被截断的整数部分。 {{ 20 // 7 }} 结果为 2
%
计算整除的余数。 {{ 11 % 7 }} 结果为 4
*
左操作数乘以右操作数。 {{ 2 * 2 }} 将返回 4 。也可以被用于多次重复字串。 {{ '=' * 80 }} 将打印一个80个等号的条。
**
对左操作符求右操作符次幂。 {{ 2**3 }} 将返回 8

比较 (Comparisons)

==
比较两个对象相等。
!=
比较两个对象不等。
>
如果左边大于右边,返回 true
>=
如果左边大于或等于右边,返回 true
<
如果左边小于右边,返回 true
<=
如果左边小于或等于右边,返回 true

逻辑 (Logic)

对于 if 语句, for 过滤器,和 if 表达式,组合多个表达式是非常有用的:

and
如果左右操作数皆为真,返回 true 。
or
如果左或右操作数为真,返回 true 。
not
否定语句(见下文)。
(expr)
表达式组。

注意

isin 运算符支持中缀表示法的否定使用: foo is not barfoo not in bar 而不是 not foo is barnot foo in bar 。所有其他表达式都需要前缀表示法: not (foo and bar)

其他运算符 (Other Operators)

下述运算符非常有用,但是不归类于其他上述分类:

in
执行序列/映射的包含测试。如果左操作数被包含于有操作数中,返回 true 。例如: {{ 1 in [1, 2, 3] }} 将返回 true 。
is
执行一个 测试
|
应用一个 过滤器
~
转换所有操作数为字符串,并拼接到一起。
{{ "Hello" ~ name ~ "!" }} (假设 name 设置为 'John' )将返回 Hello John!
()
调用一个 callable : {{ post.render() }} 。像 Python 那样,您可以在括号内使用位置参数和关键字参数:
{{ post.render(user, full=true) }}
. / []
获取一个对象的属性。(详细参阅 变量 )。

If表达式 (If Expression)

也可以使用内联的 if 表达式。在某些情况下是很有用的。例如:如果定义了一个变量,则可以从一个模板中使用此扩展,否则从默认布局模板中扩展:

通用语法是 <do something> if <something is true> else <do something else>

else 部分是可选的。如果不提供, else 块将隐式的设置为一个未定义对象(undefined object):

2 thoughts on “[Flask][09]Jinja2模板设计文档——表达式

发表评论

电子邮件地址不会被公开。 必填项已用*标注