我试图渲染文件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

当前回答

我认为Flask默认使用目录模板。你的代码应该是这样的

假设这是你的hello.py

from flask import Flask,render_template

app=Flask(__name__,template_folder='template')


@app.route("/")
def home():
    return render_template('home.html')

@app.route("/about/")
def about():
    return render_template('about.html')

if __name__=="__main__":
    app.run(debug=True)

你的工作空间结构就像

project/
    hello.py        
    template/
         home.html
         about.html    
    static/
           js/
             main.js
           css/
               main.css

此外,您还创建了两个HTML文件,名称为home.html和about.html,并将这些文件放在模板文件夹中。

其他回答

你需要把所有的。html文件放在python模块旁边的模板文件夹中。如果你的html文件中有任何图片,那么你需要把所有的文件都放在名为static的文件夹中

在以下结构中

project/
    hello.py
    static/
        image.jpg
        style.css
    templates/
        homepage.html
    virtual/
        filename.json

我的问题是,我从home.html中引用的文件是.j2而不是.html,当我把它改回来时,jinja可以读取它。

愚蠢的错误,但也许能帮到别人。

另一种解释是我自己想出来的 当你创建Flask应用程序时,模板所在的文件夹是应用程序的文件夹,根据你提供给Flask构造函数的名称:

app = Flask(__name__)

这里的__name__是应用程序正在运行的模块的名称。因此适当的文件夹将成为文件夹搜索的根文件夹。

projects/
    yourproject/
        app/
            templates/

因此,如果你提供了一些随机名称,根文件夹的搜索将是当前文件夹。

如果您从已安装的包中运行代码,请确保模板文件存在于<python根>/lib/site-packages/your-package/templates目录下。


一些细节:

在我的情况下,我试图运行项目flask_simple_ui和jinja的例子总是说

jinja2.exceptions。TemplateNotFound: form.html

诀窍在于示例程序将导入已安装的包flask_simple_ui。在这个包中使用的ninja是用于查找包路径的根目录,在我的例子中…Python /lib/site-packages/flask_simple_ui,而不是人们期望的os.getcwd()。

不幸的是,setup.py有一个错误,没有复制任何html文件,包括丢失的form.html。一旦我修复了setup.py, TemplateNotFound的问题就消失了。

我希望它能帮助到一些人。

当使用render_template()函数时,它尝试在名为templates的文件夹中搜索template,并抛出错误jinj2a .exceptions。当:

文件不存在或 模板文件夹不存在

在python文件所在的同一目录下创建一个带有名称模板的文件夹,并将创建的html文件放在templates文件夹中。