#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 помогает загружать все дочерние шаблоны при рекурсивном применении. После завершения тривиально получить переменные из всех шаблонов в одном списке.