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

标签 python file templates flask

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

最佳答案

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

错误提示templates/目录下没有home.html文件。确保您在与 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 option 让 Flask 解释它是如何尝试找到给定模板的。为。对于每个加载的模板,您都会得到一个记录到 Flask app.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')

蓝图可以register their own template directories也是如此,但如果您使用蓝图更容易将较大的项目拆分为多个逻辑单元,则这不是必需的。即使为每个蓝图使用额外的路径,也总是首先搜索主 Flask 应用程序模板目录。

关于python - 即使模板文件存在,Flask 也会引发 TemplateNotFound 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23327293/

相关文章:

c# - 如何以编程方式设置 WPF DataGrid 的模板和填充内容?

python - 如何在sqlalchemy中创建子查询

java - Jython 2.2.1,如何移动文件? Shutils.move 不存在!

python - python中的文件路径层次排序

c# - 删除所有默认文件权限

c++ - 在 C++ 中,是否可以将两种不同的数据类型传递给模板函数?

python - 直方图给出了概率密度函数的奇怪值

python - 转换为 Logn Python 3.7

Python:如何使用 glob 和通配符打开 CDF 文件

c++ - 模板模板参数简单示例