我在我的webapp导航系统中有一个表格,每次渲染页面时都会填充最新的信息。如何避免在每个view
中都放置以下代码?
def myview():
mydict = code_to_generate_dict()
return render_template('main_page.html',mydict=mydict)
mydict
用于填充表格。该表格将显示在每个页面上。
@app.context_processor
def inject_dict_for_all_templates():
return dict(mydict=code_to_generate_dict())
您可以传递一个函数来代替装饰器,该函数将作为必要的上下文处理器。
app = Flask(__name__)
app.context_processor(templatetags)
def templatetags():
def format_price(amount, currency="€"):
return f"{amount:.2f}{currency}"
return dict(
format_price=format_price,
)
'index.html'
{{ format_price(0.33) }}
编写自己的渲染方法以避免重复代码。然后每当您需要呈现模板时,请调用它。
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')
dict
来返回,无论我要注入的变量是一个string
、list
还是任何其他数据类型(包括dict
)。 - Brian Leachcontext_processor
在Flask应用程序对象上,因此它适用于该应用程序处理的任何视图。如果您有多个应用程序,则需要重复此操作。 - Josh Japp/customer/views_customer.py, app/results/views_results.py
我是否需要为每个视图文件使用单独的context_processor
? - lukassliackyapp = Flask(...)
) 只有一个。如果这些视图都由先前的app
服务,则它们共享上下文。 - Josh J