使用时jinja2,基本的“骨架”模板通常会被许多其他模板扩展。
jinja2
我的基本模板之一在上下文中需要某些变量,在我使用该基本模板的任何地方,我都必须重复设置过程。
例如,我可能需要从数据库中读取一些类别名称,并将它们呈现为标题中的列表,现在我必须在使用基本模板的任何地方编写此查询。
有什么好的方法可以避免在使用时重复此类代码jinja2?
您可以将上下文处理器添加到您的应用程序或蓝图。这些为Jinja环境注入了额外的价值。这些不是任何视图的一部分,但是将在请求上下文中运行,因此您可以访问视图中通常会执行的所有操作。
@app.context_processor def base_context(): return { 'author': 'davidism', 'last_update': interesting_function() 'headers': db.query(MyModel.category).distinct().all() }
蓝图上添加的处理器仅可用于从该蓝图上的视图渲染的模板。
传递给render_template函数的上下文将覆盖这些默认上下文值(如果它们具有相同的键)。
render_template