您的位置:首页 > 运维架构

django 模板里面for循环和forloop变量

2015-06-18 17:13 483 查看

Django模板的{% for %}循环

Django模板的{% for %}循环与Python的for 语句的情形类似:

循环语法:

 for X in Y ,( Y是要迭代的序列,X是在每一个特定的循环中使用的变量名称)。每一次循环中,模板系统会渲染在{% for %} and {% endfor %} 中的所有内容。

例: 

给定一个运动员列表athlete_list 变量,我们可以使用下面的代码来显示这个列表:
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>

注1: 给标签增加一个reversed 使得该列表被反向迭代:
{% for athlete in athlete_list reversed %}

...

{% endfor %}
注2:可以嵌套使用{% for %} 标签:
{% for country in countries %}

<h1>{{ country.name }}</h1>

<ul>

{% for city in country.city_set.all %} 

<li>{{ city }}</li>

{% endfor %}

</ul>

{% endfor %}
注3:Django不支持退出循环操作。如果我们想退出循环,可以改变正在迭代的变量,让其仅仅包含需要迭代的项目。同理,Django也不支持continue语句,我们无法让当前迭代操作跳回到循环头部。(请参看本章稍后的理念和限制小节,了解下决定这个设计的背后原因)

Diango模板中的forloop变量

{% for %} 标签在循环中设置了一个特殊的 forloop 模板变量。这个变量能提供一些当前循环进展的信息:

1. forloop.counter  : forloop.counter总是一个表示当前循环的执行次数的整数计数器。这个计数器是从1开始的,所以在第一次循环时forloop.counter 将会被设置为1。例子如下:

{% for item in todo_list %}

<p>{{ forloop.counter }}: {{ item }}</p>
{% endfor %}

2.  forloop.counter0 : forloop.counter0 类似于 forloop.counter ,但是它是从0计数的。第一次执行循环时这个变量会被设置为0。
3.  forloop.revcounter : forloop.revcounter 是表示循环中剩余项的整型变量。在循环初次执行时 forloop.revcounter 将被设置为序列中项的总数。最后一次循环执行中,这个变量将被置1。 

4. forloop.revcounter0 : forloop.revcounter 0类似于 forloop.revcounter ,但它以0做为结束索引。在第一次执行循环时,该变量会被置为序列的项的个数减1。在最后一迭代时,该变量为0。

5. forloop.first 是一个布尔值。在第一次执行循环时该变量为True,在下面的情形中这个变量是很有用的。

{% for object in objects %}

{% if forloop.first %}<li class="first">{% else %}<li>{% endif %}

{{ object }}

</li>
{% endfor %}

6. forloop.last 是一个布尔值;在最后一次执行循环时被置为True。一个常见的用法是在一系列的链接之间放置管道符(|)

{% for link in links %}{{ link }}{% if not forloop.last %} | {% endif %}{% endfor %}
显示如下:
Link1 | Link2 | Link3 | Link4

7. forloop.parentloop 是一个指向当前循环的上一级循环的 forloop 对象的引用(在嵌套循环的情况下)。例子在此:

{% for country in countries %}

<table>

{% for city in country.city_list %}

<tr>

<td>Country #{{ forloop.parentloop.counter }}</td>

<td>City #{{ forloop.counter }}</td>

<td>{{ city }}</td>

</tr>

{% endfor %}

</table>
{% endfor %}

注1.  forloop 变量仅仅能够在循环中使用,在模板解析器碰到 {% endfor %} 标签时, forloop 就不可访问了。

注2.  Context和forloop变量

  在一个{% for %} 块中,已存在的变量会被移除,以避免 forloop 变量被覆盖。Django会把这个变量移动到
forloop.parentloop 中。通常我们不用担心这个问题,但是一旦我们在模板中定义了 forloop 这个变量(当然我们反对这样做),在{% for %} 块中它会在forloop.parentloop 被重新命名。

参考链接:

http://wanglianghuaihua.blog.163.com/blog/static/54251531201332894755248/ 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: