小编典典

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

all

我正在尝试渲染文件home.htmljinja2.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

阅读 106

收藏
2022-07-29

共1个答案

小编典典

您必须在正确的位置创建模板文件;在templatespython 模块(== 创建 Flask 应用程序的模块)旁边的子目录中。

该错误表明目录中没有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
level中记录一个报告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 应用程序模板目录。

2022-07-29