Получить список переменных из шаблона Jinja2 (родительского и дочернего)

#python #python-3.x #jinja2

#python #python-3.x #jinja2

Вопрос:

Я пытаюсь получить список переменных из шаблона Jinja2.

test1.j2:

 some-non-relevant-content
{{var1}}
{% include 'test2.j2' %}
 

test2.j2:

 another-text
{{var2}}
 

Я могу легко получить переменные из test1:

 env = Environment(loader=FileSystemLoader(searchpath='./Templates'))
src_t = env.loader.get_source(env, 'test1.j2')[0]
parsed_t = env.parse(source=src_t)
t_vars = meta.find_undeclared_variables(ast=parsed_t)
 

Проблема в том, что я могу получать переменные только из родительского шаблона с помощью get_source.
Очевидно, что я также не могу передать объект шаблона класса в метод синтаксического анализа.

Есть ли какой-нибудь способ создать полный список? {‘var1’, ‘var2’} в моем случае. В идеале с помощью API Jinja2. Минимальный пользовательский код.

Ответ №1:

Нашел способ закодировать это без особых усилий. meta.find_referenced_templates помогает загружать все дочерние шаблоны при рекурсивном применении. После завершения тривиально получить переменные из всех шаблонов в одном списке.