我有一个三列表(第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> </td>
<td><a href="{{ item.url }}"><img src="{{ MEDIA_URL }}{{ item.image }}" width="300" height="100" /></a></td>
</tr>
{% endfor %}<tr>
实现这一目标的最佳方法是什么?
答案 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> </td>
{% else %}
<td><a href="{{ item.url }}"><img src="{{ MEDIA_URL }}{{ item.image }}" width="300" height="100" /></a></td>
</tr>
{% endif %}
{% endfor %}
但请确保您的设置中有偶数元素,否则<tr>
将不会关闭。