2024-03-29 04:47:11 发布
网友
在使用jinja2时,基本“骨架”模板通常由许多其他模板扩展。你知道吗
jinja2
我的一个基本模板需要上下文中的某些变量,无论在哪里使用这个基本模板,我都必须复制设置过程。你知道吗
例如,我可能需要从DB中读取一些类别名称并将它们呈现为标题中的列表,现在我必须在使用基本模板的任何地方编写此查询。你知道吗
在使用jinja2时,有什么好方法可以避免重复这些代码?你知道吗
我可以想到的一种方法是使用一个decorator,为每个视图的结果提供额外的上下文变量。你知道吗
您可以在Jinja2或自定义过滤器上使用宏:
宏:
http://jinja.pocoo.org/docs/dev/templates/#macros
您可以向装饰器注册自定义筛选器,如下所示:
https://github.com/dpgaspar/Flask-AppBuilder/blob/master/flask_appbuilder/filters.py
您可以向应用程序或蓝图添加上下文处理器。这些为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
我可以想到的一种方法是使用一个decorator,为每个视图的结果提供额外的上下文变量。你知道吗
您可以在Jinja2或自定义过滤器上使用宏:
宏:
http://jinja.pocoo.org/docs/dev/templates/#macros
您可以向装饰器注册自定义筛选器,如下所示:
https://github.com/dpgaspar/Flask-AppBuilder/blob/master/flask_appbuilder/filters.py
您可以向应用程序或蓝图添加上下文处理器。这些为Jinja上下文注入了额外的值。这些不是任何视图的一部分,但将在请求上下文中运行,这样您就可以访问视图中的所有内容。你知道吗
添加到蓝图上的处理器仅对从该蓝图上的视图渲染的模板可用。你知道吗
传递给
render_template
函数的上下文将覆盖这些默认上下文值(如果它们具有相同的键)。你知道吗相关问题 更多 >
编程相关推荐