if/else 标签
基本语法格式如下:
{% if condition %}
... display
{% endif %}
或者:
{% if condition1 %}
... display 1
{% elif condiiton2 %}
... display 2
{% else %}
... display 3
{% endif %}
根据条件判断是否输出。if/else 支持嵌套。
Note:模板标签中的变量是不需要用 {% raw %}{{ {% endraw %} 来包裹的。
and、or 或not
{% raw %}{% if %}{% endraw %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反(not),例如:
{% if athlete_list and coach_list %}
athletes 和 coaches 变量都是可用的。
{% endif %}
注意,{% raw %}{% if %}{% endraw %} 标签不允许在同一个标签中同时使用 and 和 or ,因为逻辑上可能模糊的,这样的代码是不合法的:
{% if athlete_list and coach_list or cheerleader_list %}
系统不支持用圆括号来组合比较操作。 如果你确实需要用到圆括号来组合表达你的逻辑式,考虑将它移到模板之外处理,然后以模板变量的形式传入结果吧。 或者,仅仅用嵌套的 {% raw %}{% if %}{% endraw %} 标签替换
for 标签
常规用法
{% raw %}{% for %}{% endraw %} 允许我们在一个序列上迭代。与Python的 for 语句的情形类似,循环语法是 for X in Y ,Y是要迭代的序列而X是在每一个特定的循环中使用的变量名称。
每一次循环中,模板系统会渲染在 {% raw %}{% for %}{% endraw %} 和 {% raw %}{% endfor %}{% endraw %} 之间的所有内容。
例如,给定一个运动员列表 athlete_list 变量,我们可以使用下面的代码来显示这个列表:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
反向迭代
给标签增加一个 reversed 使得该列表被反向迭代:
{% for athlete in athlete_list reversed %}
嵌套使用 {% raw %}{% for %}{% endraw %}
可以嵌套使用 {% raw %}{% for %}{% endraw %} 标签。
在执行循环之前先检测列表的大小是一个通常的做法,当列表为空时输出一些特别的提示。 for
标签支持一个可选的 {% raw %}{% empty %}{% endraw %} 分句,通过它我们可以定义当列表为空时的输出内容。
下面的例子与用if-else实现等价:
{% for athlete in athlete_list %}
<p>{{ athlete.name }}</p>
{% empty %}
<p>There are no athletes. Only computer programmers.</p>
{% endfor %}
Django不支持退出循环操作。 如果我们想退出循环,可以改变正在迭代的变量,让其仅仅包含需要迭代的项目。 同理,Django也不支持continue语句,我们无法让当前迭代操作跳回到循环头部。
执行次数的整数计数器
在每个 {% raw %}{% for %}{% endraw %} 循环里有一个称为 forloop
的模板变量。这个变量有一些提示循环进度信息的属性。
forloop.counter 总是一个表示当前循环的执行次数的整数计数器。 这个计数器是从1开始的,所以在第一次循环时forloop.counter 将会被设置为1。
{% for item in todo_list %}
<p>{{ forloop.counter }}: {{ item }}</p>
{% endfor %}