Как сбросить импортированные переменные пространства имен в Jinja2 - PullRequest
0 голосов
/ 30 сентября 2019

У меня возникли некоторые проблемы с моими шаблонами, и я не нашел подходящего мне решения.

Вот пример шаблона, который импортирован в другое место (назовем его import_with_var.j2):

{% set _ns = namespace() %}

{% set _ns.my_var = 1 %}

{% macro inc_var(args) %}
    {% set _ns.my_var = _ns.my_var + 1 %}   
{% endmacro %}

{% macro display_var(args) %}
{{ _ns.my_var }}
{% endmacro %}

И вот как я его использую (шаблон называется no_reset.j2):

{% import 'import_with_var.j2' as imp %}
{{ imp.inc_var() }}
{{ imp.display_var() }}

Теперь я отображаю шаблон с помощью этого кода, предполагая, что шаблоны находятся внутри директории "templates":

        self.template_dir = os.path.join(self.input_dir, 'templates')
        self.loader = FileSystemLoader(self.template_dir)

        self.jinja_env = Environment(
            loader=self.loader,
            trim_blocks=True
        )

Теперь, если я вызову render дважды таким образом:

tpl = self.jinja_env.get_template("no_reset.j2")
first = tpl.render({})
second = tpl.render({})
print(first, second)

Вот что отображается: 2 3

Почему Jinja хранит кеш между рендерамизвонки? Как мне правильно его сбросить?

Я прочитал документ, но ничего полезного не нашел.

Использование with context в операторе импорта не работает, когда вы несколько раз импортируете один и тот же файл вв разных местах и ​​хотите сохранить кеш.

Единственное решение, которое я нашел, - это воссоздание Environment каждый раз, когда я хочу выполнить рендеринг, но единственное ли это решение?

Спасибо за вашепомогите, Андреас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...