Djangoにはテンプレートの内容を出力するTemplateView
というMixinがあります。
この記事では、Djangoにおける TemplateView
について解説します。
それはなにか
TemplateView
とはモデルと紐付けせずにテンプレートの内容を出力するViewです。
モデルと紐付いたViewはそのモデルのデータを自動的に取得してテンプレートで使用できるようになりますが、このテンプレートではそれがありません。
といっても、モデルのデータをテンプレートに表示できないわけではなく、get_context_data
を呼び出すので、オーバーライドすることでモデルのデータを取得してテンプレートに渡すことができます。
TemplateView
はデータの自動取得はしないがget_context_data
を呼び出すので、自分でコードを書くことでモデルのレコードを取得できる
どんないいことがあるのか
テンプレートの内容を出力することができます。
使い方
モデルはこんな感じだと思ってください。
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
from django.views.generic import TemplateView
from .models import Article
class ArticleDeleteView(DeleteView):
template_name = "index.html"
# このようにしてデータを取得することは可能
def get_context_data(self, **args):
context = super().get_context_data(**args)
context['articles'] = Article.objects.all()[:10]
return context
template_name
はTemplateView
で必須です。
template_name
は必須
自動で生成される変数はありません。
<h1>TemplateView</h1>
<ul>
{% for a in articles %}
<li>{{ a.title }}</li>
</ul>
get_context_data
でArticle
モデルからデータを取得していますのでテンプレートで表示させています。
注意点
特にありません。
まとめ
筆者はトップページなどに使用しています。