强制移动到django中模板中for循环中的下一条记录

时间:2011-12-14 13:43:22

标签: django django-templates

我有一个三列表(第1列和第3列将显示图像)。我使用forloop循环遍历模板中的对象列表。

在循环中我想强制forloop转到下一个项目,因此第3列中的项目是下一个记录。我在django docs中看不到像'forloop.next'这样的内容。

{% for item in object_list %}<tr>
    <td><a href="{{ item.url }}"><img src="{{ MEDIA_URL }}{{ item.image }}" width="300" height="100" /></a></td>
    <td>&nbsp;</td>
    <td><a href="{{ item.url }}"><img src="{{ MEDIA_URL }}{{ item.image }}" width="300" height="100" /></a></td>
</tr>
{% endfor %}<tr>

实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

你可以创建迭代器,它会在每次迭代时产生一对元素。

这样的东西
from itertools import tee, izip, islice

iter1, iter2 = tee(object_list)
object_list = izip(islice(iter1, 0, None, 2), islice(iter2, 1, None, 2))

# if object_list == [1,2,3,4,5,6,7,8] then result will be iterator with data: [(1, 2), (3, 4), (5, 6), (7, 8)]

或者你可以在模板中做到这一点:

{% for item in object_list %}
{% if forloop.counter0|divisibleby:2 %}
<tr>
<td><a href="{{ item.url }}"><img src="{{ MEDIA_URL }}{{ item.image }}" width="300" height="100" /></a></td>
<td>&nbsp;</td>
{% else %}
<td><a href="{{ item.url }}"><img src="{{ MEDIA_URL }}{{ item.image }}" width="300" height="100" /></a></td>
</tr>
{% endif %}
{% endfor %}

但请确保您的设置中有偶数元素,否则<tr>将不会关闭。