- 本文为《知了传课——控制语句》的学习笔记。
- 原文地址:第四节:控制语句 - Python框架Flask基础教程 - 知了传课 (zlkt.net)
所有的控制语句都是放在{% ... %}中,并且有一个语句{% endxxx %}来进行结束,Jinja中常用的控制语句有if/for..in..
if语句Jinja中的if语句和python中的的if语句类似,可以使用>,<,<=,>=,==,!=来进行判断,也可以通过and,or,not,()来进行逻辑合并操作。
栗子
{% if age > 18 %}
您已成年!
{% elif age < 18 %}
你的内容
{% else %}
你的内容
{% endif %}
(注意:在使用if语句时,结尾处需要加上{% endif %})
测试器
测试器主要用来判断一个值是否满足某种类型,并且这种类型一般通过普通的if判断是有很大的挑战的。语法是:if...is...,先来简单的看个栗子:
{% if variable is escaped %} //判断变量的值是否被转义
变量被转义了,value of variable: {{ escaped }}
{% else %}
变量未被转义
{% endif %}
以上判断variable这个变量是否已经被转义了。
Jinja中内置了许多的测试器,如下表所示:
| 测试器 | 说明 |
|---|---|
| callable(object) | 是否可调用 |
| defined(object) | 是否已经被定义了。 |
| escaped(object) | 是否已经被转义了。 |
| upper(object) | 是否全是大写。 |
| lower(object) | 是否全是小写。 |
| string(object) | 是否是一个字符串。 |
| sequence(object) | 是否是一个序列。 |
| number(object) | 是否是一个数字。 |
| odd(object) | 是否是奇数。 |
| even(object) | 是否是偶数。 |
for循环可以遍历任何一个序列包括列表、字典、元组。并且可以进行反向遍历。
(注意:不可以使用continue和break表达式来控制循环的执行。)
-
普通的遍历:
-
{% for user in users %}
- {{ user }} {% endfor %}
-
遍历字典:
-
{% for key, value in dict.items() %}
- {{ key }}
- {{ value }} {% endfor %}
-
如果序列中没有值的时候,进入else:
-
{% for user in users %}
- {{ user }} {% else %}
- no users found {% endfor %}
并且Jinja中的for循环还包含以下变量,可以用来获取当前的遍历状态:
| 变量 | 描述 |
|---|---|
| loop.index | 当前迭代的索引(从1开始) |
| loop.index0 | 当前迭代的索引(从0开始) |
| loop.first | 是否是第一次迭代,返回True或False |
| loop.last | 是否是最后一次迭代,返回True或False |
| loop.length | 序列的长度 |



