Импорт/включение назначенных переменных в Jinja2

Как в Jinja2 можно получить доступ к назначенным переменным (например, {% set X=Y %}) в файлах, включенных в include?

Я ожидаю, что следующее будет работать с двумя файлами Jinja2:

A.jinja:

Stuff
{% include 'B.jinja' -%}
B has {{ N }} references

B.jinja:

{% set N = 12 %}

Я ожидаю, что A.jinja при компиляции с Jinja2 выдаст следующий результат:

Stuff 
B has 12 references

Тем не менее, он производит:

Stuff
B has  references

Я был бы очень признателен за любой вклад в отношении того, как получить доступ к переменным Jinja2, таким как N выше, в файле, который включает файл, в котором установлено N.

Спасибо за чтение.

Брайан


person Brian M. Hunt    schedule 10.06.2010    source источник


Ответы (1)


Между include и import есть разница, хотя вы должны уметь делать и то, и другое.

  • include 'B.jinja просто отображает шаблон и игнорирует любые назначения переменных или макросы внутри него.
  • import 'B.jinja' as B, импортирует B, как если бы это был модуль, поэтому вы должны вывести B.N.
  • from 'B.jinja' import N импортирует переменную N напрямую.

Измените строку импорта на последнюю опцию и посмотрите, исправит ли это ситуацию. Если вам нужна дополнительная помощь, просмотрите документацию.

person Nikhil Chelliah    schedule 17.06.2010
comment
Разве эта последняя строка не должна быть from 'B.jinja' import N? - person smac89; 22.08.2017