将 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()`