Принудительно перейти к следующей записи в течение цикла в шаблоне в Django - PullRequest
2 голосов
/ 14 декабря 2011

У меня есть таблица из трех столбцов (столбцы 1 и 3 покажут изображение).Я зацикливаюсь на списке объектов в шаблоне с помощью forloop.

Внутри цикла я хочу заставить forloop перейти к следующему элементу, чтобы элемент в 3-м столбце был следующей записью.Я не вижу ничего похожего на «forloop.next» в django docs.

{% 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 Ответ

2 голосов
/ 14 декабря 2011

Вы можете создать итератор, который будет создавать пару элементов на каждой итерации.

Что-то вроде

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> не будет закрыт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...