我有一个使用蓝图的Flask
应用,我想要更改蓝图搜索模板的目录。
我创建了如下蓝图:
main = Blueprint('main', __name__, template_folder='newName')
@main.route('/')
def index():
return render_template("index.html")
然后我注册并运行我的应用程序:
app.register_blueprint(main)
app.run(debug=True)
但是,如果我继续将templates
目录的名称更改为newName
,我会jinja2.exceptions.TemplateNotFound
。如果我将目录名称更改回templates
,我的应用程序工作正常并呈现index.html
页面;蓝图正在注册,但template_folder
param似乎无关紧要。为什么它没有影响?如何使用蓝图在newName
中存储我的模板?
编辑:
我有以下结构:
run.py <--- from app import build
build().run(debug=True)
app/
__init__.py <--- define build: register bp and return app
controllers/
__init__.py <--- import main blueprint from main
main.py <--- create main blueprint as above
newName/
index.html
答案 0 :(得分:2)
$ tree
.
├── app.py
└── foo
├── bp
│ └── index.html
└── __init__.py
2 directories, 3 files
# atupal at xiaomi in /tmp/atupal/py [13:25:26]
$ cat app.py
from flask import Flask
import foo
app = Flask(__name__)
app.register_blueprint(foo.bp)
if __name__ == '__main__':
app.run(debug=True)
# atupal at xiaomi in /tmp/atupal/py [13:25:28]
$ cat foo/__init__.py
from flask import Blueprint, render_template
bp = Blueprint('bp', __name__, template_folder='bp')
@bp.route('/')
def index():
return render_template('index.html')
# atupal at xiaomi in /tmp/atupal/py [13:25:37]
$ curl http://127.0.0.1:5000/
<p>
index
</p>
从文档中我们可以看到:
对于静态文件,路径可以是绝对路径,也可以是相对于蓝图资源文件夹。模板文件夹添加到模板的搜索路径中,但优先级低于实际应用程序的模板文件夹。这样,您可以轻松覆盖蓝图在实际应用程序中提供的模板。
因此,如果您提供的template_folder不存在。 Flask将在应用程序的模板文件夹中搜索它,默认名称为“templates”。