Jinja2 find_undeclared_variables会忽略全局变量?

时间:2015-06-10 14:34:29

标签: python jinja2

我想知道全局变量不包含Jinja2模板的哪些变量。我加载模板源,解析它并将结果提供给git push。无论环境的全局字典是什么,我都会获得模板的完整变量列表。如何使此操作识别环境和模板中的全局变量,并仅返回它们未涵盖的变量列表。

下面的示例创建一个环境,呈现模板以显示确实已读取全局变量并调用master以显示其结果。

origin/master

代码打印:

meta.find_undeclared_variables

如果meta.find_undeclared_variables是全局的,我想更改我的代码,以便只返回from jinja2 import Environment, meta, FunctionLoader, PrefixLoader def load_mapping(name): return 'Mapping %s {{version}} {{docid}}' % name def load_link(name): return 'Link %s {{version}} {{docid}}' % name loader = PrefixLoader({ 'link': FunctionLoader(load_link), 'map': FunctionLoader(load_mapping) }) env = Environment(loader=loader) globals = {'version': '1.0'} env.globals.update(globals) print env.get_template('map/test').render(docid='asdf') tsrc = env.loader.get_source(env, 'link/test') parsed = env.parse(tsrc) print meta.find_undeclared_variables(parsed)

我使用Python 2.7.6和Jinja 2.7.3。

1 个答案:

答案 0 :(得分:2)

jinja_globals = env.globals.keys()
print meta.find_undeclared_variables(parsed) - set(jinja_globals)