У меня возникли некоторые проблемы с моими шаблонами, и я не нашел подходящего мне решения.
Вот пример шаблона, который импортирован в другое место (назовем его 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
каждый раз, когда я хочу выполнить рендеринг, но единственное ли это решение?
Спасибо за вашепомогите, Андреас