将 Flask 与蓝图一起使用时出现模板错误
Template error while using Flask with blueprints
我在尝试 运行 使用蓝图的 Flask 应用程序时遇到找不到模板的错误。模板目录位于根目录中,与应用程序目录处于同一级别。我不太清楚为什么会这样。
目录结构
root/
app/
blueprint1/
routes.py
__main__.py
templates/
base.html
index.html
routes.py
from flask import Blueprint, render_template
blueprint = Blueprint(
"blueprint", __name__, template_folder="templates")
@blueprint.route("/", methods=["GET", "POST"])
def index():
return render_template("index.html")
错误
raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: index.html
main.py
from flask import Flask
from app.blueprint1.routes import blueprint
def create_app():
app = Flask(__name__)
app.register_blueprint(blueprint)
return app
def _main():
daemon_app = create_app()
daemon_app.run(debug=True)
if __name__ == "__main__":
_main()
根据您的文件结构,您的蓝图从主模板文件夹中呈现 html 个文件。如果您从 routes.py 文件中删除 template_folder 参数,它可能会起作用。
我复制了您的代码并尝试模拟错误,但它对我有用。一年前,我遇到了同样的问题,但我以某种方式解决了它。由于无法模拟错误,因此无法解决您的问题。
相反,我只会给你建议。您正在努力在他们自己的包中创建蓝图,但您正在使用主模板文件夹。当您有很多蓝图时,管理模板文件夹将成为一个挑战。因此,我建议将 html 文件放在蓝图包本身中。
文件结构如下:
root/
app/
blueprint1/
pages/blueprint1/index.html
routes.py
__main__.py
templates/
base.html
和routes.py应该是这样的
blueprint = Blueprint(
"blueprint", __name__, template_folder="pages")
@blueprint.route("/", methods=["GET", "POST"])
def index():
return render_template("blueprint1/index.html")
这个有效,我稍微编辑了一下
routes.py
from flask import Blueprint, render_template
blueprint = Blueprint("blueprint", __name__, template_folder="../../templates")
@blueprint.route("/", methods=["GET", "POST"])
def index():
return render_template("index.html")
__main__.py
from flask import Flask
from routes import blueprint
def create_app():
app = Flask(__name__)
app.register_blueprint(blueprint)
return app
def _main():
daemon_app = create_app()
daemon_app.run(debug=True)
if __name__ == "__main__":
_main()`
我在尝试 运行 使用蓝图的 Flask 应用程序时遇到找不到模板的错误。模板目录位于根目录中,与应用程序目录处于同一级别。我不太清楚为什么会这样。
目录结构
root/
app/
blueprint1/
routes.py
__main__.py
templates/
base.html
index.html
routes.py
from flask import Blueprint, render_template
blueprint = Blueprint(
"blueprint", __name__, template_folder="templates")
@blueprint.route("/", methods=["GET", "POST"])
def index():
return render_template("index.html")
错误
raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: index.html
main.py
from flask import Flask
from app.blueprint1.routes import blueprint
def create_app():
app = Flask(__name__)
app.register_blueprint(blueprint)
return app
def _main():
daemon_app = create_app()
daemon_app.run(debug=True)
if __name__ == "__main__":
_main()
根据您的文件结构,您的蓝图从主模板文件夹中呈现 html 个文件。如果您从 routes.py 文件中删除 template_folder 参数,它可能会起作用。
我复制了您的代码并尝试模拟错误,但它对我有用。一年前,我遇到了同样的问题,但我以某种方式解决了它。由于无法模拟错误,因此无法解决您的问题。
相反,我只会给你建议。您正在努力在他们自己的包中创建蓝图,但您正在使用主模板文件夹。当您有很多蓝图时,管理模板文件夹将成为一个挑战。因此,我建议将 html 文件放在蓝图包本身中。
文件结构如下:
root/
app/
blueprint1/
pages/blueprint1/index.html
routes.py
__main__.py
templates/
base.html
和routes.py应该是这样的
blueprint = Blueprint(
"blueprint", __name__, template_folder="pages")
@blueprint.route("/", methods=["GET", "POST"])
def index():
return render_template("blueprint1/index.html")
这个有效,我稍微编辑了一下
routes.py
from flask import Blueprint, render_template
blueprint = Blueprint("blueprint", __name__, template_folder="../../templates")
@blueprint.route("/", methods=["GET", "POST"])
def index():
return render_template("index.html")
__main__.py
from flask import Flask
from routes import blueprint
def create_app():
app = Flask(__name__)
app.register_blueprint(blueprint)
return app
def _main():
daemon_app = create_app()
daemon_app.run(debug=True)
if __name__ == "__main__":
_main()`