Python的“真值”:在Python和Django模板系统中,空列表([]),空元组(()),空字典({}),空字符串(''),零值(0),特殊对象None,对象False,这些对象相当于布尔值得False
- if/else : {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% endif %} 之间的任何内容
{% if today_is_weekend %}
<p>Welcome to the weekend</p>
{% else %}
<p>Get back to work.</p>
{% endif %}
|
# {% if %}标签接受and,or或者not关键字来对多个变量做判断,或者对变量取反(not)
# {% if %}标签不允许在同一个标签中同时使用 and 和 or ,因为逻辑上可能模糊的
# 多次使用同一个逻辑操作符是没有问题的,但是我们不能把不同的操作符组合起来。
# 并没有 {% elif %} 标签, 请使用嵌套的`` {% if %}`` 标签来达成同样的效果
- for : {% for %} 允许我们在一个序列上迭代。 与Python的 for 语句的情形类似,循环语法是 for X in Y ,Y是要迭代的序列而X是在每一个特定的循环中使用的变量名称。每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
|
# 给标签增加一个 reversed 使得该列表被反向迭代:
{% for athlete in athlete_list
reversed %}
...
{% endfor %}
# 可以嵌套使用 {% for %} 标签
# 在执行循环之前先检测列表的大小是一个通常的做法,当列表为空时输出一些特别的提示。因为这种做法
十分常见,所以`` for`` 标签支持一个可选的`` {% empty %}`` 分句,通过它我们可以定义当列表
为空时的输出内容:
{% for athlete in athlete_list %}
{{ athlete.name }}
{%
empty %}
There are no athletes. Only computer programmers.
{% endfor %}
# Django不支持退出循环操作。 如果我们想退出循环,可以改变正在迭代的变量,让其仅仅包含需要迭代
的项目。 同理,Django也不支持continue语句,我们无法让当前迭代操作跳回到循环头部。
# 在每个`` {% for %}``循环里有一个称为`` forloop`` 的模板变量。这个变量有一些提示循环进度信
息的属性。
--forloop.counter 总是一个表示当前循环的执行次数的整数计数器。 这个计数器是从1开始的,所
以在第一次循环时 forloop.counter 将会被设置为1。
--forloop.counter0 类似于 forloop.counter ,但是它是从0计数的。 第一次执行循环时这个
变量会被设置为0。
--forloop.revcounter 是表示循环中剩余项的整型变量。 在循环初次执行forloop.revcounter
将被设置为序列中项的总数。 最后一次循环执行中,这个变量将被置1。
--forloop.revcounter0 类似于 forloop.revcounter ,但它以0做为结束索引。在第一次执行循
环时,该变量会被置为序列的项的个数减1。
--forloop.first 是一个布尔值,如果该迭代是第一次执行,那么它被置为````,在下面的情形中这个
变量是很有用的:
{% for object in objects %}
{% if forloop.first %}
{% else %}{% endif %}
{{ object }}
{% endfor %}
--forloop.last 是一个布尔值;在最后一次执行循环时被置为True。 一个常见的用法是在一系列的链
接之间放置管道符(|)
--forloop.parentloop 是一个指向当前循环的上一级循环的 forloop 对象的引用(在嵌套循环的
情况下)。
- ifequal/ifnotequal:{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值
{% ifequal user currentuser %}
<h1>Welcome!>
{% endifequal %}
|
# 和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签
#
参数可以是硬编码的字符串,随便用单引号或者双引号引起来.
# 只有模板变量,字符串,整数和小数可以作为 {% ifequal %} 标签的参数,其他任何类型,例如
Python的字典类型、列表类型、布尔类型,不能用在 {% ifequal %} 中。
# 用这种语法的注释不能跨越多行,这个限制是为了提高模板解析的性能。如果要实现多行注释,可以
使用`` {% comment %}`` 模板标签,就像这样:
{% comment %}
This is a
multi-line comment.
{% endcomment %}
过滤器:模板过滤器是在变量被显示前修改它的值的一个简单方法,过滤器使用管道字符。
# 过滤管道可以被* 套接* ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入,如此下
去。
# 有些过滤器有参数。 过滤器的参数跟随冒号之后并且总是以双引号包含。 例如:
{{ bio|truncatewords:"30" }}
--addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。 这在处理包含JavaScript
的文本时是非常有用的。
--date : 按指定的格式字符串参数格式化 date 或者 datetime 对象
--length : 返回变量的长度。 对于列表,这个参数将返回列表元素的个数。 对于字符串,这个参
数将返回字符串中字符的个数。
阅读(1018) | 评论(0) | 转发(0) |