我想知道全局变量不包含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。
答案 0 :(得分:2)
jinja_globals = env.globals.keys()
print meta.find_undeclared_variables(parsed) - set(jinja_globals)