PythonのFlaskを使っていて、WEBブラウザから以下のエラーが返ってくることがあります。
jinja2.exceptions.TemplateNotFound
そうそう、全然解決できなくて、どうしたらいいのー
僕もなかなか解決ができなかったのですが、方法自体はとても簡単なものでした。
さっそくご紹介をしていきます。
- jinja2.exceptions.TemplateNotFoundの解決法
- 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ブラウザで確認すると以下のエラーが返ってきています。
【解決方法】templatesの3つの注意事項
僕自身、いくつかのパターンを試してみて、ミスしやすい箇所が大きく3つあることが分かりました。
もしエラーが発生した場合は、以下に該当していないかチェックしてみてください。
その①:Pythonスクリプトとtemplatesフォルダの階層が違う
Pythonのスクリプトと、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を書いていないか確認してみてください
まとめ
非常に簡単な修正なので、分かっていればすぐに解決できますが、初めてだとなかなか苦戦する部分ではないでしょうか。
僕は1時間程度、格闘してしまいました。。。
templatesフォルダの注意事項をぜひ参考にしてみてください
コメント