Django TemplateResponseMixin のImproperlyConfigured例外が発生した時の対処法

クラスベースビューを利用していると次の様なImproperlyConfigured例外が発生する事があります。

TemplateResponseMixin requires either a definition of 'template_name' or an implementation of 'get_template_names()'

これはビュークラスにtemplate_name変数を定義していない時発生します。

具体的な発生原因と対処法を紹介します。

例外の発生原因

TemplateViewやCreateViewなどのクラスベースビューは表示するテンプレートを指定する必要があります。

TemplateViewの場合以下の様にtemplate_nameを定義してテンプレートを指定します。

# TemplateViewを使う場合
path('profile/', TemplateView.as_view(template_name='accounts/profile.html'), name='profile'),

# TemplateViewを継承したクラスを作成する場合
class ProfileView(TemplateView):
    template_name='accounts/profile.html'

template_nameの定義をしていない場合、ImproperlyConfigured例外が発生します。

django.core.exceptions.ImproperlyConfigured: TemplateResponseMixin requires either a definition of 'template_name' or an implementation of 'get_template_names()'

しかしCreateViewやDetailViewなど一部のビューではhtmlのファイル名が規則に従っていればtemplate_nameの定義を省略する事ができます。

例えばCreateViewでは”<app_label>/<model_name>_form.html”、DetailViewでは“<app_label>/<model_name>_detail.html”の様なファイル名にすればtemplate_nameの定義を省略しても自動で読み込まれます。

<app_label>や<model_name>は作成したアプリやモデルに応じて変わります。

対処法

template_nameを定義し忘れていないか確認しましょう。

スポンサーリンク
スポンサーリンク