Django テンプレートで楽する技(初心者向け)
高機能はDjango、なかなか全貌が把握できてませんが、こりゃ楽だぁ〜と思った機能を3つ紹介。
数値に桁区切りのカンマを入れる方法
humanize というアプリが同梱されているので、これを使うことでテンプレートだけで対応が可能でした。
humanize は templatetags がいくつか入ってるアプリです。カンマ区切りの intcomma 以外は、日本語アプリではあまり使わなさそうだな。
使い方は3ステップ+αで完了。
- settings.py の INSTALLED_APPS に django.contrib.humanize を追加
- テンプレートにロードの記述 {% load humanize %} を追加
- 該当箇所に intcomma フィルタを適用
ただしロケールにjaを使っている場合には、もう一つおまじないが必要でした
- settings.py で NUMBER_GROUPING = 3 を追加 ※ja locale ではデフォルトで設定されてない為
テンプレート系の処理の為か、エラーも表示されないので注意が必要ですね。
- Djangoのテンプレートで整数を3桁づつカンマ(,)で区切る方法 - ドラあり!*ドラゴンに挑むアリの物語 ** Python使いの日々
- djangoで整数3桁のカンマ区切り - brainstorm
ちなみに、Pythonの言語側でやるときは、こんなふうに対応するようです。
>>> '{:,d}'.format(1234567890) '1,234,567,890'
- What’s New in Python 2.7 — Python 2.7ja1 documentation
- PEP 378: 1000区切りのための書式指定子
繰り返しでてくるhtmlを使い回す (組み込みタグ include)
テンプレートをいくつか書いてると出てくるのが、同じようなhtml箇所の散見。
こんな時には include 使って別ファイル化して管理するのが良さそうです。
今回、ナビゲーションに関わる部分をヘッダーとフッターに付けたかったので、該当部分を別ファイル化してincludeで読み込み。
注意点としては、前述 humanize のような load が必要なものは、親ではなく、include先の別ファイル側で実施するという点でしょうか?
# たぶんですが、include先は同じコンテキストではあるものの、個別にレンダリングされる為だと思われます
テンプレートタグやフィルタへと進む
includeではプロパティぐらいは扱えますが、処理がかけません。もっと楽したくなったときには、テンプレートタグなどに進むと良いのだと思います。
このドキュメントで紹介されているのが、次の2つ。いずれもアプリケーション内に templatetags ディレクトリを作成して作業します。
- テンプレートフィルタ
- テンプレートタグ
まだ一部しか使えてませんが、以前テンプレートタグ (simple_tag) を使ってみたので参考に。
- Django の paginate に GET パラメーター渡し機能を追加 - AWS / PHP / Python ちょいメモ
- paginate で ページ番号以外のパラメーターを、次のページへ引き継ぐtemplatetagsの例
# このあたりも使いこなせると、中級レベルに進めるのかもしれません。