即使模板文件存在,Flask也会引发TemplateNotFound错误

我正在尝试渲染文件home.html。该文件存在于我的项目中,但是jinja2.exceptions.TemplateNotFound: home.html当我尝试渲染它时,我一直在获取文件。Flask为什么找不到我的模板?

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')

def home():

return render_template('home.html')

/myproject

app.py

home.html

回答:

必须在正确的位置创建模板文件。在templates你的python模块旁边的子目录中。

该错误表明目录中没有home.html文件templates/。确保在与python模块相同的目录中创建了该目录,并且确实将home.html文件放在该子目录中。如果你的应用是软件包,则应在软件包内创建模板文件夹。

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的级别INFO。

搜索成功后的样子:在此示例中,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应用程序主模板目录。

以上是 即使模板文件存在,Flask也会引发TemplateNotFound错误 的全部内容, 来源链接: utcz.com/qa/425868.html

回到顶部