使用Flask将变量传递给所有Jinja2模板

时间:2015-07-31 16:12:33

标签: python flask jinja2

我的webapp导航系统中有一个表格,每次呈现页面时都会填充最新信息。我怎样才能避免在每个view中添加以下代码?

def myview():
    mydict = code_to_generate_dict() 
    return render_template('main_page.html',mydict=mydict)

mydict用于填充表格。该表将显示在每个页面上

2 个答案:

答案 0 :(得分:23)

您可以使用Flask's Context Processors将全局变量注入jinja模板

以下是一个例子:

@app.context_processor
def inject_dict_for_all_templates():
    return dict(mydict=code_to_generate_dict())
  

将新变量自动注入模板的上下文中,   Flask中存在上下文处理器。上下文处理器在之前运行   模板被渲染并具有注入新值的能力   模板上下文。上下文处理器是返回a的函数   字典。然后合并该字典的键和值   使用模板上下文,适用于应用中的所有模板:

答案 1 :(得分:1)

编写自己的渲染方法确保自己不要重复该代码。然后在需要渲染模板时调用它。

def render_with_dict(template):
    mydict = code_to_generate_dict() 
    return render_template(template, mydict=mydict)

def myview():
    return render_with_dict('main_page.html')