【发布时间】:2015-06-10 14:34:28
【问题描述】:
我想找出 Jinja2 模板的哪些变量没有被全局变量覆盖。我加载模板源,解析它并将结果输入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)
代码打印:
Mapping test 1.0 asdf
set(['version', 'docid'])
version 是一个全局变量,我想更改我的代码,以便只返回 docid。
我使用 Python 2.7.6 和 Jinja 2.7.3。
【问题讨论】: