Область действия переменной в шаблоне jinja2

Я пишу приложение на основе шаблона jinja2. Я пытаюсь написать логику для установки переменной.

{% set last_item = none %}
{% for u in users %}
  {% if not u.username == user.username%}
    {% if  g.user.is_bestfriend(u) %}
      {% set last_item = 'true' %}
    {% endif %}
  {% endif %}
{% endfor %}

{{last_item}}

но после {% endfor %} значение last_item снова устанавливается равным none вместо true. Есть ли способ установить значение true в шаблоне jinja2?


person user3526896    schedule 10.05.2014    source источник
comment
Проверьте это... stackoverflow.com/questions/4870346/   -  person Andrew Kloos    schedule 12.05.2014


Ответы (2)


Из-за правил области видимости в jinja2 вы не можете получить доступ к переменной за пределами области, в которой она была установлена. Извините :(

person nathanielobrown    schedule 22.07.2015

Начиная с версии 2.10 вы можете сделать это, используя переменную пространства имен, установленную перед входом в область видимости:

{% set ns = namespace(found=false) %}
{% for item in items %}
    {% if item.check_something() %}
        {% set ns.found = true %}
    {% endif %}
    * {{ item.title }}
{% endfor %}
Found item having something: {{ ns.found }}

См. также документацию: http://jinja.pocoo.org/docs/2.10/templates/#assignments

person ganzpopp    schedule 19.12.2018