Я хотів би зробити щось на зразок:
змінна p - з test.py, що є списком ['a', 'b', 'c', 'd']
{% for i in p %}
{{variable++}}
{{variable}}
результат виведення:
1 2 3 4
Я хотів би зробити щось на зразок:
змінна p - з test.py, що є списком ['a', 'b', 'c', 'd']
{% for i in p %}
{{variable++}}
{{variable}}
результат виведення:
1 2 3 4
Відповіді:
Ви можете використовувати loop.index
:
{% for i in p %}
{{ loop.index }}
{% endfor %}
Перевірте документацію дизайнера шаблонів .
У більш пізніх версіях через правила масштабування наступне не буде працювати:
{% set count = 1 %}
{% for i in p %}
{{ count }}
{% set count = count + 1 %}
{% endfor %}
Після 2.10, щоб вирішити проблему масштабу, ви можете зробити щось подібне:
{% set count = namespace(value=0) %}
{% for i in p %}
{{ count.value }}
{% set count.value = count.value + 1 %}
{% endfor %}
Як каже Джерун, є проблеми з обсягом: якщо ви встановите "count" поза циклом, ви не зможете змінити його всередині циклу.
Ви можете перемогти цю поведінку, використовуючи об'єкт, а не скаляр для "count":
{% set count = [1] %}
Тепер ви можете маніпулювати підрахунком усередині цикла або навіть% включити%. Ось як я збільшую підрахунок (так, це студійно, але добре):
{% if count.append(count.pop() + 1) %}{% endif %} {# increment count by 1 #}
{% set count = [] %}
, додавання елемента до списку в кожному циклі {% set __ = index.append(1) %}
та використання довжини для відображення індексу index|length
.
{% set count = [ ] %}
, додати елемент до списку в кожному циклі {% set __ = count.append(1) %}
і використовувати довжину для відображення лічильникаcount|length
Ось моє рішення:
Помістіть усі лічильники у словник:
{% set counter = {
'counter1': 0,
'counter2': 0,
'etc': 0,
} %}
Визначте макрос для їх легкого збільшення:
{% macro increment(dct, key, inc=1)%}
{% if dct.update({key: dct[key] + inc}) %} {% endif %}
{% endmacro %}
Тепер, коли ви хочете збільшити лічильник 'counter1', просто виконайте:
{{ increment(counter, 'counter1') }}
Я теж боровся з цією поведінкою. Я хотів змінити клас div у jinja на основі лічильника. Мене здивувало, що пітонічний спосіб не спрацював. Наступний код скидав мій лічильник на кожній ітерації, тому я мав лише червоний клас.
{% if sloupec3: %}
{% set counter = 1 %}
{% for row in sloupec3: %}
{% if counter == 3 %}
{% set counter = 1 %}
{% endif %}
{% if counter == 1: %}
<div class="red"> some red div </div>
{% endif %}
{% if counter == 2: %}
<div class="gray"> some gray div </div>
{% endif %}
{% set counter = counter + 1 %}
{% endfor %}
{% endif %}
Я використовував loop.index так, і це працює:
{% if sloupec3: %}
{% for row in sloupec3: %}
{% if loop.index % 2 == 1: %}
<div class="red"> some red div </div>
{% endif %}
{% if loop.index % 2 == 0: %}
<div class="gray"> some gray div </div>
{% endif %}
{% endfor %}
{% endif %}
якщо хтось хоче додати значення всередині циклу, тоді ви можете використовувати це його робоче 100%
{% set ftotal= {'total': 0} %}
{%- for pe in payment_entry -%}
{% if ftotal.update({'total': ftotal.total + 5}) %}{% endif %}
{%- endfor -%}
{{ftotal.total}}
вихід = 5
Прийшов шукати спосіб Джанго зробити це і знайшов цю публікацію. Можливо, ще комусь потрібне рішення django, яке прийшло сюди.
{% for item in item_list %}
{{ forloop.counter }} {# starting index 1 #}
{{ forloop.counter0 }} {# starting index 0 #}
{# do your stuff #}
{% endfor %}
Детальніше читайте тут: https://docs.djangoproject.com/en/1.11/ref/templates/builtins/