我正在尝试渲染文件home.html。jinja2.exceptions.TemplateNotFound: home.html该文件存在于我的项目中,但是当我尝试渲染它时我不断收到。为什么 Flask 找不到我的模板?
home.html
jinja2.exceptions.TemplateNotFound: home.html
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): return render_template('home.html') /myproject app.py home.html
您必须在正确的位置创建模板文件;在templatespython 模块(== 创建 Flask 应用程序的模块)旁边的子目录中。
templates
该错误表明目录中没有home.html文件templates/。确保您在与 python 模块相同的目录中创建了该目录,并且您确实在home.html该子目录中放置了一个文件。如果您的应用是包,则应在包 内 创建模板文件夹。
templates/
myproject/ app.py templates/ home.html myproject/ mypackage/ __init__.py templates/ home.html
或者,如果您将模板文件夹命名为其他templates目录并且不想将其重命名为默认目录,您可以告诉 Flask 使用该其他目录。
app = Flask(__name__, template_folder='template') # still relative to module
您可以通过将EXPLAIN_TEMPLATE_LOADING选项设置为True. 对于加载的每个模板,您都会在Flaskapp.logger的 level中记录一个报告INFO。
EXPLAIN_TEMPLATE_LOADING
True
app.logger
INFO
这是搜索成功时的样子;在此示例中,foo/bar.html模板扩展了base.html模板,因此有两个搜索:
foo/bar.html
base.html
[2019-06-15 16:03:39,197] INFO in debughelpers: Locating template "foo/bar.html": 1: trying loader of application "flaskpackagename" class: jinja2.loaders.FileSystemLoader encoding: 'utf-8' followlinks: False searchpath: - /.../project/flaskpackagename/templates -> found ('/.../project/flaskpackagename/templates/foo/bar.html') [2019-06-15 16:03:39,203] INFO in debughelpers: Locating template "base.html": 1: trying loader of application "flaskpackagename" class: jinja2.loaders.FileSystemLoader encoding: 'utf-8' followlinks: False searchpath: - /.../project/flaskpackagename/templates -> found ('/.../project/flaskpackagename/templates/base.html')
蓝图也可以注册自己的模板目录,但如果您使用蓝图更容易跨逻辑单元拆分更大的项目,这不是必需的。即使在每个蓝图使用附加路径时,始终首先搜索主 Flask 应用程序模板目录。