I am trying to render the file
home.html. The file exists in my project, but I keep getting
jinja2.exceptions.TemplateNotFound: home.html when I try to render it. Why can’t Flask find my template?
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): return render_template('home.html')
/myproject app.py home.html
You must create your template files in the correct location; in the
templates subdirectory next to the python module (== the module where you create your Flask app).
The error indicates that there is no
home.html file in the
templates/ directory. Make sure you created that directory in the same directory as your python module, and that you did in fact put a
home.html file in that subdirectory. If your app is a package, the templates folder should be created inside the package.
myproject/ app.py templates/ home.html
myproject/ mypackage/ __init__.py templates/ home.html
Alternatively, if you named your templates folder something other than
templates and don’t want to rename it to the default, you can tell Flask to use that other directory.
app = Flask(__name__, template_folder='template') # still relative to module
You can ask Flask to explain how it tried to find a given template, by setting the
EXPLAIN_TEMPLATE_LOADING option to
True. For every template loaded, you’ll get a report logged to the Flask
app.logger, at level
This is what it looks like when a search is successful; in this example the
foo/bar.html template extends the
base.html template, so there are two searches:
[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')
Blueprints can register their own template directories too, but this is not a requirement if you are using blueprints to make it easier to split a larger project across logical units. The main Flask app template directory is always searched first even when using additional paths per blueprint.
Answered By – Martijn Pieters
Answer Checked By – Katrina (Easybugfix Volunteer)