使用基本模板时如何避免重复contextsetingup过程?

2024-03-29 04:47:11 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用jinja2时,基本“骨架”模板通常由许多其他模板扩展。你知道吗

我的一个基本模板需要上下文中的某些变量,无论在哪里使用这个基本模板,我都必须复制设置过程。你知道吗

例如,我可能需要从DB中读取一些类别名称并将它们呈现为标题中的列表,现在我必须在使用基本模板的任何地方编写此查询。你知道吗

在使用jinja2时,有什么好方法可以避免重复这些代码?你知道吗


Tags: 方法代码名称模板标题jinja2列表db
3条回答

我可以想到的一种方法是使用一个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函数的上下文将覆盖这些默认上下文值(如果它们具有相同的键)。你知道吗

相关问题 更多 >