我有一个具有以下代码结构的页面:
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 以某种方式初始化还是保持原样?
它没有公开记录,但
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
您还可以像这样传递整个 Jinja 环境:
from flask import Flask
from jinja2 import Environment
app = Flask(__name__)
app.jinja_env = Environment(...)
当前版本的 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 文档中有一个可用选项列表。