我注意到上下文变量似乎不适用于导入的模板。也许我做错了什么?
我有一个包含宏的模板和另一个导入宏并使用它的模板。
macro = ("{% macro some_macro() %}"
"{{ func('a') }}"
"{% endmacro %}")
use_macro = ("{% from 'macro' import some_macro %}"
"{{ some_macro() }}")
loader = jinja2.loaders.DictLoader({'macro': macro,
'template': use_macro})
env = jinja2.Environment(loader=loader)
template = env.get_template('template')
现在,当我尝试在上下文中使用func
呈现模板时,它失败了,因为func
未定义:
rendered = template.render(func=lambda x: x)
当func
位于全局变量中时,它确实有效:
env.globals.update(func=lambda x: x)
rendered = template.render()
这是预期的还是看起来像个bug?
答案 0 :(得分:5)
使用带上下文的导入:
use_macro = ("{% from 'macro' import some_macro with context %}"
"{{ some_macro() }}")