スポンサーリンク

【Djangoエラー】TemplateDoesNotExistの原因と解消方法

Django
スポンサーリンク

開発環境

  • Django3.2(Python 3.9.6)
  • PostgreSQL 13.4
  • Nginx 1.20.1

こちらの記事で作成した環境になります。

エラー内容

エラー名からもなんとなくわかるかもしれませんが「テンプレートが存在しない」という内容のエラーです。この場合、指定したtemplateファイルが本当に存在しないケースもあれば、templateファイルを作成していても上手くDjango側がテンプレートファイルを読み込めていないというケースもあります。

エラーの原因

主に下記3点が原因で起こりうるエラーとなります。

  1. views側でのtemplateの指定ミス
  2. templateファイルの配置ミス
  3. settings.pyの記述ミス

views側でのtemplateの指定ミス

クラスビューベースと関数ビューベースでtemplateの指定方法が変わりますのでこの2パターンを紹介していきます。

クラスビューベースの場合

クラス変数のtemplate_nameにtemplate名を指定することでtemplatesディレクトリ内のtemplateファイルを参照してくれます。実際に存在するファイル名と指定しているファイル名が一致しているか確認してください。

# top.py
from django.views.generic import TemplateView


class TopTemplateView(TemplateView):
    template_name = "top.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context

※ちなみに私の場合、デフォルトのviewsファイルは使用せず、viewsディレクトリを作成してそこに複数view用のファイルを作成するようにしているためこのようなディレクトリ構成にしています。今回の例ではviews/top.pyにTemplateViewクラスを作成していますが、urls.pyの指定が正しければデフォルトで作成されるviewsファイルに記述していても当然問題ないです。
関数ビューベースの場合

returnメソッドの第2引数でtemplate名を指定することでtemplatesディレクトリ内のtemplateファイルを参照してくれます。こちらも実際に存在するファイル名と指定しているファイル名が一致しているか確認してください。

# top.py
from django.shortcuts import render


def top(request): 
    return render(request, 'top.html')

 

templateファイルの配置ミス

templatesディレクトリ配下に設置しているファイルの配置とviewsファイルの指定先が誤っているケースになります。例えばtemplatesディレクトリの中でblogディレクトリを切ってtemplateファイルを管理したい場合などに注意が必要です。

この場合、views.pyではディレクトリも指定する必要があります。

# top.py
from django.views.generic import TemplateView


class TopTemplateView(TemplateView):
    template_name = "blog/top.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context

settings.pyの記述ミス

settings.pyのINSTALLED_APPSに”python manage.py startapp”コマンドで追加したアプリ名を追加していないケースでも同様のエラーが表示されます。
# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'project', #ここを追加
]

上記に問題がなければエラー画面がtemplateファイルに記述したHTMLが表示されます。

Django学習に行き詰った方へ

そもそも基礎が身についてなくエラーが出るたびに学習が止まってしまうという方は体系的かつスクールよりもかなり安価にプログラミング学習ができる「Udemy」という動画学習プラットフォームを試してみることをお勧めします。自分の学習したいジャンルを選ぶことが可能で一度購入してしまえば何度でも再生することができます。Djangoで私がおすすめする動画は 「【徹底的に解説!】Djangoの基礎をマスターして、3つのアプリを作ろう!」です。
レビューもかなり高く、受講生も多いです。特に初学者の方が基礎を理解するには最適の動画になっています。
またこの動画を作成された方は下記のDjango本も執筆しており、初学者にかなりわかりやすい内容となってますので興味のある方はこの本もぜひチェックしてみてください。

Django関連の記事

Dockerとdocker-composeでDjango×MySQL×Nginx環境を構築する方法
Docker初心者でもわかるように解説しています。Django初学者向けの開発環境構築手順を記述しています。Dockerとdocker-composeでPython/Django×Nginx×MySQLの環境が簡単に作成できます。
Python/Djangoで爆速でRESTAPI作成する方法(Swaggerも使用)
Django/PythonでRESTAPIを作成する方法を解説します。Swaggerも使用しています。ライブラリのインストール方法の記載もあります。

コメント