クラスベースビューを利用していると次の様な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を定義し忘れていないか確認しましょう。
コメントを残す