Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Счетчик в jinjja2

#python #jinja2


Не работает счетчик i. Данные заполняются, но переменная не инкрементируется. Значение
счетчика i всегда 1. Как поправить?

{% set i = 0 %}
{% for class in classes %}
        
  • {{ class }}
  • {% set i = i+1 %}
  • {{ i }}
  • {% if i == 4 %}
    {% endif %} {% endfor %}


    Ответы

    Ответ 1



    Внутри циклов можно использовать {{ loop.index }}: {% for class in classes %}
  • {{ class }}
  • {{ loop.index }}
  • {% if loop.index == 4 %}
    {% endif %} {% endfor %} PS. странно, у меня {% set %} тоже не работает, возможно эта бага: https://github.com/pallets/jinja/issues/659

    Ответ 2



    Решение этой проблемы описано в документации: {% set ns = namespace(counter=false) %} {% for class in classes %}
  • {{ class }}
  • {% set ns.counter = ns.counter+1 %}
  • {{ ns.counter }}
  • {% if ns.counter == 4 %}
    {% endif %} {% endfor %} As of version 2.10 more complex use cases can be handled using namespace objects which allow propagating of changes across scopes Note hat the obj.attr notation in the set tag is only allowed for namespace objects; attempting to assign an attribute on any other object will raise an exception. New in version 2.10: Added support for namespace objects Документация: http://jinja.pocoo.org/docs/2.10/templates/ CTRL+F -> Scoping Behavior.

    Комментариев нет:

    Отправить комментарий