我试图渲染文件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
如果您从已安装的包中运行代码,请确保模板文件存在于<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的问题就消失了。
我希望它能帮助到一些人。
另一种替代方法是设置root_path,它可以修复模板和静态文件夹的问题。
root_path = Path(sys.executable).parent if getattr(sys, 'frozen', False) else Path(__file__).parent
app = Flask(__name__.split('.')[0], root_path=root_path)
如果你直接通过Jinja2渲染模板,那么你可以这样写:
ENV = jinja2.Environment(loader=jinja2.FileSystemLoader(str(root_path / 'templates')))
template = ENV.get_template(your_template_name)