Получение следующего элемента в цикле

1

То, что я хочу сделать, довольно просто: у меня есть модель, на которой я запускаю цикл перегруппировки. Теперь я хочу показать первые 4 элемента цикла рядом друг с другом, а затем продолжить на следующей строке со следующими 4 пунктами, пока список не будет выполнен. Если предметов больше нет, другие ячейки на линии могут оставаться пустыми.

Я попытался понять, как я могу использовать итерации здесь, но не смог понять, как он подходит к тому, что у меня есть. Кроме того, у меня есть идея, что это должно быть возможно сделать это проще... Ниже я скопировал код, который у меня есть сейчас, который, очевидно, показывает первый элемент цикла 4 раза, затем в 4 раза второй, и т.п.

Я знаю, что на этом сайте есть похожие вопросы, но я не смог использовать их для разработки решения для моего вопроса. Я запускаю Python в Google App Engine. Любая помощь очень ценится!

{% regroup communities|dictsort:"in_country" by in_country as community_list %}

{% for in_country in community_list %}
<h2 style="font-size:16px;">{{ in_country.grouper }}</h2>

<table cellspacing="0">
{% for item in in_country.list|dictsort:"name" %}

<tr style="text-align:center;">
 <td width="200px" class='community_table'>
    <img src="{{ item.image }}" style="height:40px;"><br />
    <a href='{{ item.url }}' style="font-size:10px; margin-left:10px;" TARGET = "_blank">{{ item.name }}</a><br />
    {{ item.com_type }}<br />
    {{ item.in_city }}<br />
 </td>

 <td width="200px" class='community_table'>
    <img src="{{ item.image }}" style="height:40px;"><br />
    <a href='{{ item.url }}' style="font-size:10px; margin-left:10px;" TARGET = "_blank">{{ item.name }}</a><br />
    {{ item.com_type }}<br />
    {{ item.in_city }}<br />
 </td>

 <td width="200px" class='community_table'>
    <img src="{{ item.image }}" style="height:40px;"><br />
    <a href='{{ item.url }}' style="font-size:10px; margin-left:10px;" TARGET = "_blank">{{ item.name }}</a><br />
    {{ item.com_type }}<br />
    {{ item.in_city }}<br />
 </td>

 <td width="200px" class='community_table'>
    <img src="{{ item.image }}" style="height:40px;"><br />
    <a href='{{ item.url }}' style="font-size:10px; margin-left:10px;" TARGET = "_blank">{{ item.name }}</a><br />
    {{ item.com_type }}<br />
    {{ item.in_city }}<br />
 </td>

{% endfor %}     
</table>  

{% endfor %}
  • 0
    Этот вопрос не имеет ничего общего с Python.
  • 0
    @DanielRoseman Не согласен. Приложение написано на Python, оно использует шаблонизатор Python, и решение может быть правдоподобным: «сделайте группировку в Python, прежде чем переходить к шаблону».
Теги:
loops
django-templates
google-app-engine

2 ответа

1
Лучший ответ
<table cellspacing="0">
{% for item in in_country.list|dictsort:"name" %}

{% if forloop.counter0|divisibleby:4 %}
<tr style="text-align:center;">
{% endif %}

 <td width="200px" class='community_table'>
    <img src="{{ item.image }}" style="height:40px;"><br />
    <a href='{{ item.url }}' style="font-size:10px; margin-left:10px;" TARGET = "_blank">{{ item.name }}</a><br />
    {{ item.com_type }}<br />
    {{ item.in_city }}<br />
 </td>

{% if forloop.counter|divisibleby:4 %}
 </tr>
{% endif %}

{% endfor %}
</table>
  • 1
    Спасибо, что ответили. Я понимаю, что вы пытаетесь сделать, и это на самом деле гораздо более логично, чем моя попытка. Однако, при попытке кода это выдает ошибку: TemplateSyntaxError: Invalid filter: 'divisible_by' Кстати, 'forloop.counter' в конце также не должен заканчиваться 0 (forloop.counter0)
  • 1
    Извините, должно быть divisibleby . И нет, вы хотите, чтобы первый тег отображался только в строках 0, 4, 8 и т. Д., А последний - в строках 3, 7, 11 и т. Д.
Показать ещё 2 комментария
0

Я бы предложил группировать ваши строки в коде Python, прежде чем передавать его в шаблон. Вы можете сделать это, используя итераторы:

my_iter = iter(my_list)
grouped = zip(my_iter, my_iter, my_iter, my_iter) # or zip(*[my_iter]*4)
  • 0
    Спасибо Ник. Я просмотрел функцию iter, прежде чем опубликовать вопрос, но ничего не понял. Думаю, я вернусь к документации по этому вопросу :) Еще раз спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню