获取Jinja2模板中的变量列表(父级和子级)

时间:2016-10-15 22:25:44

标签: 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'}。 理想情况下使用Jinja2 API。最低自定义代码。

1 个答案:

答案 0 :(得分:2)

找到一种方法来编码,没有太大的痛苦。 meta.find_referenced_templates有助于在递归应用时加载所有子模板。完成后,从单个列表中的所有模板中获取变量是微不足道的。