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

我正在尝试呈现文件home.html 。 该文件存在于我的项目,但我不断收到jinja2.exceptions.TemplateNotFound: home.html当我尝试呈现它。 为什么Flask无法find我的模板?

 from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): return render_template('home.html') 
 /myproject app.py home.html 

您必须在正确的位置创build您的模板文件; 在Python模块旁边的templates子目录中。

该错误表明templates/目录中没有home.html文件。 确保你创build的目录和你的python模块在同一个目录下,而且你确实把一个home.html文件放在了这个子目录下。 如果您的应用程序是一个包,则应该在包创build模板文件夹。

 myproject/ app.py templates/ home.html 
 myproject/ mypackage/ __init__.py templates/ home.html 

或者,如果您将模板文件夹命名为模板之外的其他templates并且不想将其重命名为默认templates ,则可以让Flask使用该其他目录。

 app = Flask(__name__, template_folder='template') # still relative to module 

检查:

  1. 该模板文件有正确的名称
  2. 该模板文件位于名为“模板”的子目录中
  3. 您没有与您的应用程序同名的子目录,或者模板目录位于该子目录中。

如果这不起作用,打开debugging( app.debug = True ),这可能有助于找出什么是错的。

不知道为什么,但与Python 3.6我不得不使用下面的文件夹结构(把“模板”低一级…):

 test/ app/ hello.py static/ main.css templates/ home.html virtual/ pip-selfcheck.json etc... 

您需要将所有.html文件放在python模块旁边的模板文件夹中。 如果您的html文件中有任何图像,则需要将所有文件放在名为static的文件夹中

在以下结构中

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