Djangoのテンプレートは便利ですが、機能が多いため使い慣れるまでは何が重要なのか判別できるまで時間がかかると思います。
今回はテンプレートを活用するために最低限覚えておきたい機能を紹介します。
テンプレートに変数を渡す方法
テンプレートに変数を渡す方法は2つあります。
- コンテキストを使う
- コンテキストプロセッサを使う
コンテキストを使う
1つ目はコンテキストを使う方法です。
ビュー毎にテンプレートで使用される変数に値を設定できます。
Django公式のチュートリアルでも紹介されているので解説はしません。公式では以下の様な例が紹介されています。
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
context = {'latest_question_list': latest_question_list}
return render(request, 'polls/index.html', context)
コンテキストプロセッサを使う
全てのテンプレートで使える変数を定義できます。
デフォルトではdebugや request、messages変数などが利用できます。
非常に便利な変数が用意されているので覚えておくことをお勧めします。活用すればビュー側で変数を設定する手間が省けます。
オリジナルのコンテキストプロセッサを作成することもできます。
複数のビューやテンプレートで同じ変数を定義している場合はコンテキストプロセッサを使った方が効果的か考えてみると良いでしょう。
テンプレートタグやフィルタを活用する
テンプレートで使われるタグやフィルタは以下の様なコードです。
# タグ
{% tag %}
# フィルタ
{{ name|lower }}
Djangoには多くのタグやフィルタが使えます。私は多すぎて覚えきれないので都度使えるタグやフィルタがないか確認しています。
テンプレートタグやフィルタは自作できます。
例えば複数の変数を使って独自のhtmlコードを作成したい時があります。
ビュー側で作成することもできますが、以下の様に自作のテンプレートタグを使って作成することもできます。
{% custom_tag hoge1 hoge2 %}
この例ではcustom_tagがhtmlを生成するカスタムタグで、hoge1, hoge2は変数で、値はビュー側で定義します。
{% load %}タグを使ってタグを読み込む必要があります。
Model、View、Template(MVT)で考えると”htmlコードの生成”はTemplateに分類する方が最も適しています。
よって、ビュー側でhtmlコードを作成するよりも、テンプレートタグを使って生成した方が良いと思います。
しかしテンプレートタグを使うとテンプレートエンジンの処理が入るので多少遅くなります。
処理速度を重視する場合はビュー側に書くと良いでしょう。
テンプレートの設定
settings.pyにTEMPLATESというテンプレートに関する設定があります。プロジェクト生成時は以下の様になっています。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
私はDIRSのリストを
'DIRS': [BASE_DIR / 'core/templates'],
の様に変更する以外はデフォルトのまま使用しています。
開発するサイトによっては’context_processors’のリストにカスタマイズしたコンテキストプロセッサを追加します。
‘OPTIONS’には’context_processors’以外にもあります。
例えば’builtins’は任意に組み込みタグとフィルタを追加する事ができます。
これにより{% load %}タグで呼び出す必要がなくなります。(どのテンプレートでも使える様になります)
OPTIONS={
'builtins': ['myapp.builtins'],
}
まとめ
テンプレートで覚えておきたい機能として「テンプレートに変数を渡す方法」、「テンプレートタグやフィルタを活用する」、「テンプレートの設定」の3つを紹介しました。
これらの機能はテンプレートの設計に役立つと思います。
コメントを残す