この記事では、テンプレートビュー(Template View)の利用方法について詳述する。
TemplateViewの基本的な使い方
1.TemplateViewを用いた画面表示
TemplateViewを使用して、画面を表示する方法についてまずは記載していく。
viewには簡単に、view_name=''として、表示するテンプレートのパスを設定する。
(テンプレートのパスの設定方法はこちらを参照)
- views.py(テンプレートのパスの設定)
class IndexView(TemplateView):
template_name = 'index.html'
# template_nameに表示するテンプレートファイルのパスを指定
次に、urls.pyの設定を行う。
urls.pyの設定はシンプルにクラス名.as_view()とする。
- urls.py
from django.urls import path
from basic_app import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.IndexView.as_view(), name='index')
]
テンプレートファイルは以下のように記述した。
- index.html
{% block body_block %}
<h1>Hello World! TemplateView</h1>
{% endblock %}
Djangoを立ち上げて画面を表示すると以下のように表示される。
2.TemplateViewでの値の引き渡し(get_context_data)
TemplateViewで、値をテンプレートの渡して、画面上に表示したいことがある。
このような場合、一般的にget_context_data関数を利用する。
get_context_dataはTemplateViewの継承元django.views.generic.base.ContextMixinのメソッドで、これをオーバーライドして、テンプレートを実行する前に呼び出されるようにし、変数に値を設定する。
- views.py
class IndexView(TemplateView):
template_name = 'index.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# 親のget_context_dataを呼んで値を取得
context['injectme'] = 'Basic Injection'
return context
# 新たに値を追加して値を返す
urls.pyは変更せず、index.htmlの設定は以下のようにして値を取得した。
- index.html
{% block body_block %}
<h1>Hello World! TemplateView</h1>
<h2>Injected Content: {{ injectme }}</h2>
<!-- views.pyで設定した値を表示 --L
{% endblock %}
Djangoを動かして、アクセスすると以下のような画面が表示される。