【发布时间】:2015-10-23 09:32:28
【问题描述】:
我的 web 应用程序的导航系统中有一个表格,每次呈现页面时都会填充最新信息。如何避免在每个view 中添加以下代码?
def myview():
mydict = code_to_generate_dict()
return render_template('main_page.html',mydict=mydict)
mydict 用于填充表格。表格将显示在每一页上
【问题讨论】:
我的 web 应用程序的导航系统中有一个表格,每次呈现页面时都会填充最新信息。如何避免在每个view 中添加以下代码?
def myview():
mydict = code_to_generate_dict()
return render_template('main_page.html',mydict=mydict)
mydict 用于填充表格。表格将显示在每一页上
【问题讨论】:
您可以使用Flask's Context Processors 将全局变量注入到您的 jinja 模板中
这是一个例子:
@app.context_processor
def inject_dict_for_all_templates():
return dict(mydict=code_to_generate_dict())
要将新变量自动注入到模板的上下文中, Flask 中存在上下文处理器。上下文处理器在 模板被渲染并能够将新值注入 模板上下文。上下文处理器是一个函数,它返回一个 字典。然后合并此字典的键和值 对于应用程序中的所有模板,使用模板上下文:
【讨论】:
dict,无论我要注入的变量是 string、list 还是任何其他数据类型(包括dict)
context_processor 位于 Flask 应用程序对象上,因此它适用于该应用程序处理的任何视图。如果您有多个应用程序,那么您需要重复它。
app = Flask(...))。如果这些视图都由之前的 app 提供服务,那么它们共享上下文。
编写自己的渲染方法可以避免重复该代码。然后在需要渲染模板时调用它。
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')
【讨论】: