Django for 标签

For 循环

for 循环用于遍历序列,例如遍历数组、列表或字典中的项目。

实例

遍历列表中的项目:

{% for x in fruits %}
  <h1>{{ x }}</h1>
{% endfor %}
运行实例 »

实例

遍历字典列表:

{% for x in cars %}
  <h1>{{ x.brand }}</h1>
  <p>{{ x.model }}</p>
  <p>{{ x.year }}</p>
{% endfor %} 
运行实例 »

来自模型的数据

模型中的数据就像一个有行和列的表格。

我们之前创建的 Members 模型有五行,每行有三列:

 id   firstname   lastname 
 1   Emil   Refsnes 
 2   Tobias   Refsnes 
 3   Linus   Refsnes 
 4   Lene   Refsnes 
 5   Stalikken   Refsnes 

当我们从模型中获取数据时,它以 QuerySet 对象的形式出现,格式与上面的 cars 示例类似:带有字典的列表:

<QuerySet [
  {
    'id': 1,
    'firstname': 'Emil',
    'lastname': 'Refsnes'
  },
  {
    'id': 2,
    'firstname': 'Tobias',
    'lastname': 'Refsnes'
  },
  {
    'id': 3,
    'firstname': 'Linus',
    'lastname': 'Refsnes'
  },
  {
    'id': 4,
    'firstname': 'Lene',
    'lastname': 'Refsnes'
  },
  {
    'id': 5,
    'firstname': 'Stalikken',
    'lastname': 'Refsnes'
  }
]> 

实例

遍历从数据库中获取的项目:

{% for x in members %}
  <h1>{{ x.id }}</h1>
  <p>
    {{ x.firstname }}
    {{ x.lastname }}
  </p>
{% endfor %} 
运行实例 »

Reversed

reversed 关键字用于当您想以相反的顺序执行循环时。

实例

{% for x in members reversed %}
  <h1>{{ x.id }}</h1>
  <p>
    {{ x.firstname }}
    {{ x.lastname }}
  </p>
{% endfor %}  
运行实例 »

Empty

empty 关键字可以用来在对象为空的情况下做一些特殊的事情。

实例

<ul>
  {% for x in emptytestobject %}
    <li>{{ x.firstname }}</li>
  {% empty %}
    <li>No members</li>
  {% endfor %}
</ul> 
运行实例 »

如果对象不存在,也可以使用empty关键字:

实例

<ul>
  {% for x in myobject %}
    <li>{{ x.firstname }}</li>
  {% empty %}
    <li>No members</li>
  {% endfor %}
</ul> 
运行实例 »

Loop 循环变量

Django 在循环中有一些变量可供您使用:

  • forloop.counter
  • forloop.counter0
  • forloop.first
  • forloop.last
  • forloop.parentloop
  • forloop.revcounter
  • forloop.revcounter0

forloop.counter

当前迭代,从 1 开始。

实例

<ul>
  {% for x in fruits %}
    <li>{{ forloop.counter }}</li>
  {% endfor %}
</ul> 
运行实例 »

forloop.counter0

当前迭代,从 0 开始。

实例

<ul>
  {% for x in fruits %}
    <li>{{ forloop.counter0 }}</li>
  {% endfor %}
</ul> 
运行实例 »

forloop.first

允许您测试循环是否处于第一次迭代中。

实例

为循环的第一次迭代画一个蓝色背景:

<ul>
  {% for x in fruits %}
    <li
      {% if forloop.first %}
        style='background-color:lightblue;'
      {% endif %}
    >{{ x }}</li>
  {% endfor %}
</ul> 
运行实例 »

forloop.last

允许您测试循环是否处于最后一次迭代。

实例

为循环的最后一次迭代画一个蓝色背景:

<ul>
  {% for x in fruits %}
    <li
      {% if forloop.last %}
        style='background-color:lightblue;'
      {% endif %}
    >{{ x }}</li>
  {% endfor %}
</ul> 
运行实例 »

forloop.revcounter

如果从末尾开始倒数,则为当前迭代,以 1 结束。

实例

<ul>
  {% for x in fruits %}
    <li>{{ forloop.revcounter }}</li>
  {% endfor %}
</ul> 
运行实例 »

forloop.revcounter0

如果从末尾开始倒数,则为当前迭代,以 0 结束。

实例

<ul>
  {% for x in fruits %}
    <li>{{ forloop.revcounter0 }}</li>
  {% endfor %}
</ul> 
运行实例 »