if/else
{% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% endif %} 之间的任何内容,且在{% if %}之后{% else %}可选,例如:
{% if today_is_weekend %}
<p>Welcome to the weekend!</p>
{% else %}
<p>Get back to work.</p>
{% endif %}
另外,{% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断,或者对变量取反( not ),但是不支持嵌套圆括号,可以使用嵌套if解决。
for
{% for %} 允许我们在一个序列上迭代,每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。例如:
{% for filed in list %}
<li>{{ filed.name }}</li>
{% endfor %}
还可以在for循环中添加reserved来反向迭代列表:
{% for filed in list reserved %}
<li>{{ filed.name }}</li>
{% endfor %}
for循环可以被嵌套,通常我们先检查列表是否为空,为空时会使用{% empty %}输出提示:
{% for filed in list reserved %}
<li>{{ filed.name }}</li>
{% empty %}
<p>the list is empty.</p>
{% endfor %}
forloop.counter:整数计数器,从1开始,第一次执行时被设为1,(forloop.counter0从0开始计数,第一次执行时被设为0):
<p>{{ forloop.counter }}: {{ item }}</p>
forloop.revcounter :表示循环中剩余项的整型变量。 在循环初次执行时 forloop.revcounter 将被设置为序列中项的总数。 最后一次循环执行中,这个变量将被置1(同理,forloop.revcounter0执行时被设为序列总数-1,最后一次执行被置为0)
forloop.first 和 forloop.last 为布尔值,判断是否为序列第一个/最后一个,forloop.last常用作为不同的字符串或项添加,或 |
forloop.parentloop 是一个指向当前循环的上一级循环的 forloop 对象的引用(在嵌套循环的情况下)。 例子在此:
{% for list in lists%}
<table>
{% for filed in list %}
<tr>
<td>List #{{ forloop.parentloop.counter }}</td>
<td>Filed #{{ forloop.counter }}</td>
<td>{{ Filed }}</td>
</tr>
{% endfor %}
</table>
{% endfor %}
forloop 变量仅仅能够在循环中使用。 碰到{% endfor %}标签后,forloop就不可访问了。
ifequal/ifnotequal
Django不允许我们在Templete中执行python语法,但是提供了ifequal/ifnotequal方法使用:
{% ifequal usera userb %}
<h1>Welcome!</h1>
{% endifequal %}
参数也可以是硬编码的字符串,且可以使用{% else %}方法:
{% ifequal usera 'userb' %}
<h1>Welcome!</h1>
{% else %}
<h1>No Body</h1>
{% endifequal %}
但是python中的字典,列表,布尔类型的数据不能够用在{% ifequal %}中。
注释
{# 单行注释 #}
{% comment %}
多行注释。
多行注释。
{% endcomment %}
过滤器
过滤器使用管道符 I :
转换大小写:
{{ name|upper }}
{{ name|lower }}
实现查找列表的第一个元素并将其转化为大写:
{{ my_list|first|upper }}
有些过滤器有参数。 过滤器的参数跟随冒号之后并且总是以双引号包含。 例如:
{{ bio|truncatewords:"30" }}
这个将显示变量 bio 的前30个词。
addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。 这在处理包含JavaScript的文本时是非常有用的。
date : 按指定的格式字符串参数格式化 date 或者 datetime 对象, 范例:
{{ pub_date|date:“F j, Y” }}
length : 返回变量的长度。 对于列表,这个参数将返回列表元素的个数。 对于字符串,这个参数将返回字符串中字符的个数。