Python日記

【Flask】jinja2.exceptions.TemplateNotFoundの解消法|Python実行時の3つのチェックポイント

2021年4月11日

Flask TemplateNotFoundの接続エラー解消の巻

PythonのFlaskを使っていて、WEBブラウザから以下のエラーが返ってくることがあります。

jinja2.exceptions.TemplateNotFound
お悩みさん

そうそう、全然解決できなくて、どうしたらいいのー

僕もなかなか解決ができなかったのですが、方法自体はとても簡単なものでした。

さっそくご紹介をしていきます。

この記事で学べること

  1. jinja2.exceptions.TemplateNotFoundの解決法
  2. templatesフォルダの注意事項

エラー内容:jinja2.exceptions.TemplateNotFound

Flaskのワークフレームを作成して、Pythonを実行しました。(実行結果はいつも通り)

* Serving Flask app "__init__" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!

しかし、Webブラウザで確認すると以下のエラーが返ってきています。

Python Flask jinja2.exceptions.TemplateNotFound エラー内容

【解決方法】templatesの3つの注意事項

僕自身、いくつかのパターンを試してみて、ミスしやすい箇所が大きく3つあることが分かりました。

もしエラーが発生した場合は、以下に該当していないかチェックしてみてください。

Pythonスクリプトとtemplatesフォルダの階層が違う

Pythonのスクリプトと、templatesフォルダが同じ階層でなければ、

ブラウザでエラーが発生するようです。

Python Flask jinja2.exceptions.TemplateNotFound templatesフォルダ スクリプト 同じ階層

この2つが同じディレクトリにあるか確認してみてください

templatesフォルダ名を間違えている

凡ミスですが、やりがちなのがフォルダ名の間違い。

templateではなく、templates です。

最後のsを必ず忘れないようにしてください。

htmlファイルの指定は、相対パスではない

スクリプトを書いていて、うっかり相対パスで書いてしまっていませんか?

return render_template( 'xxxxxx.html' )  だけで問題ありません。

'templates/xxxxxx.html'赤字の部分は不要です。

以下が正常に動いた記述です。

@app.route('/')
def home():
    return render_template('home.html',posts=posts)

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

NGパターン!

例えば、以下のようにtemplatesを書いていないか確認してみてください

jinja2.exceptions.TemplateNotFound 解消法

まとめ

この記事で学べんだこと

  1. jinja2.exceptions.TemplateNotFoundの解決法
  2. templatesフォルダの注意事項

非常に簡単な修正なので、分かっていればすぐに解決できますが、

初めてだとなかなか苦戦する部分ではないでしょうか。

僕は1時間程度、格闘してしまいました。。。
templatesフォルダの注意事項をぜひ参考にしてみてください

-Python日記
-,