2013-08-17 60 views
0

我注意到上下文變量似乎不適用於導入的模板。也許我做錯了什麼?Jinja2渲染上下文不適用於導入的模板

我有一個模板包含一個宏和另一個模板,導入宏並使用它。

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() 

這是否按預期或這看起來像一個錯誤?

回答

5

採用進口與背景:

use_macro = ("{% from 'macro' import some_macro with context %}" 
      "{{ some_macro() }}")