Мне нужно сравнить postback.campaign_id
со значением следующего элемента. Если похоже, то я ничего не печатаю, если нет, то печатаю свою строку.
Но этот код выводит все.
<table>
<tr>
<td class = "expand expand-campaign"><a>Test</a></td>
<td>{{ account_id }}</td>
</tr>
{% for postback in postbacks %}
{% if loop.nextitem is defined and postback.campaign_id != loop.nextitem[0] %}
<tr>
<td></td><td></td>
<td><input type = "checkbox"></td>
<td class = "expand expand-site"><a>{{ postback.campaign_id }}</a></td>
</tr>
{% endif %}
{% endfor %}
</table>
🤔 А знаете ли вы, что...
С Python можно создавать веб-скраперы для извлечения данных из веб-сайтов.
loop.nextitem
содержит всю переменную в вашем следующем элементе. Итак, если это словарь или объект, как в вашем случае, вы можете получить доступ к его свойствам, таким как текущий объект в цикле.
В вашем случае это будет означать:
postback.campaign_id != loop.nextitem.campaign_id
У вас также есть проблема, что ваш последний элемент всегда будет пропущен по условию loop.nextitem is defined
. Поскольку вы всегда будете печатать последний элемент из серии похожих элементов, вы можете отлично сделать:
{% if loop.nextitem is undefined
or postback.campaign_id != loop.nextitem.campaign_id
%}
Также обратите внимание, что в Jinja есть конструкция loop.changed()
, которая может пригодиться в этом конкретном случае использования.
Итак, со списком вроде:
postbacks = [
{'campagn_id': 1},
{'campagn_id': 2},
{'campagn_id': 2},
{'campagn_id': 3},
{'campagn_id': 3},
]
И этот фрагмент Jinja:
<table>
{%- for postback in postbacks %}
{%- if loop.changed(postback.campaign_id) %}
<tr>
<td class = "expand expand-site">
{{ postback.campaign_id }}
</td>
</tr>
{%- endif %}
{%- endfor %}
</table>
Он отображается с добавлением некоторого стиля для ясности, как:
table {
border-collapse: collapse;
}
td {
border: 1px solid;
padding: 4px;
}
<table>
<tr>
<td class = "expand expand-site">
1
</td>
</tr>
<tr>
<td class = "expand expand-site">
2
</td>
</tr>
<tr>
<td class = "expand expand-site">
3
</td>
</tr>
</table>