如何在Flask中设置Jinja环境变量?

问题描述 投票:0回答:3

我有一个具有以下代码结构的页面:

Python代码:

from flask import Flask,render_template

app=Flask(__name__)

@app.route('/')
def home():
    return render_template("first.html")

@app.route('/second')
def next():
    return render_template("second.html")

if __name__=="__main__":
    app.run(debug=True)

second.html 的 HTML 代码:

{% extends first.html %}
<dosomething>
</dosomething>

现在我想将Jinja的环境设置如下:

环境:

import jinja2

JINJA_ENV=jinja2.Environment(block_start_string='#%',block_end_string="#%",variable_start_string='{',variable_end_string='}')

我希望这些更改能够反映在 Flask 中。这个变量应该用 Flask 以某种方式初始化还是保持原样?

python html flask jinja2
3个回答
9
投票

它没有公开记录,但

Flask()
对象有一个
.jinja_options
字典,将用于构建 Jinja 环境。请确保尽快设置。

来源:

https://github.com/pallets/flask/blob/bbb273bb761461ab329f03ff2d9002f6cb81e2a4/src/flask/app.py#L272

https://github.com/pallets/flask/blob/bbb273bb761461ab329f03ff2d9002f6cb81e2a4/src/flask/app.py#L652

示例:

from flask import Flask
from jinja2 import ChainableUndefined

app = Flask(__name__)
app.jinja_options["undefined"] = ChainableUndefined

2
投票

您还可以像这样传递整个 Jinja 环境:

from flask import Flask
from jinja2 import Environment

app = Flask(__name__)
app.jinja_env = Environment(...)

0
投票

当前版本的 Flask 不允许您在创建

app.jinja_options
后修改
app
,因此您需要设置自己的
Environment
实例。

如果您只想修改 Flask 的 Jinja 默认值而不是创建自己的环境,您可以子类化

Environment
并覆盖您想要修改的选项:

from flask.templating import Environment

app = Flask(__name__)

class CustomEnvironment(Environment):
    def __init__(self, app, **options):
        options['lstrip_blocks'] = True # override default option 
        super().__init__(app, **options)

app.jinja_env = CustomEnvironment(app)

Jinja 文档中有一个可用选项列表

© www.soinside.com 2019 - 2024. All rights reserved.