我试图渲染文件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在目录层次结构的适当级别中查找。

例如. .

    app = Flask(__name__, template_folder='../templates')
    app = Flask(__name__, template_folder='../templates', static_folder='../static')

从…开始/向后移动一个目录并从那里开始。

从../..开始/向后移动两个目录并从那里开始(依此类推…)。

在子目录中…

template_folder='templates/some_template'

其他回答

我不知道为什么,但我不得不使用下面的文件夹结构。我把“模板”提升了一层。

project/
    app/
        hello.py
        static/
            main.css
    templates/
        home.html
    venv/

这可能表明其他地方的配置错误,但我不知道那是什么,这是可行的。

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

在以下结构中

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

我认为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,并将这些文件放在模板文件夹中。

经过大量的工作,我从这篇文章中得到了解决方案, 链接到解决方案的帖子

添加template_folder参数的全路径

app = Flask(__name__,
        template_folder='/home/project/templates/'
        )

如果必须使用自定义的项目目录结构(而不是公认的答案项目结构), 我们可以选择告诉flask在目录层次结构的适当级别中查找。

例如. .

    app = Flask(__name__, template_folder='../templates')
    app = Flask(__name__, template_folder='../templates', static_folder='../static')

从…开始/向后移动一个目录并从那里开始。

从../..开始/向后移动两个目录并从那里开始(依此类推…)。

在子目录中…

template_folder='templates/some_template'