読者です 読者をやめる 読者になる 読者になる

AWS / PHP / Python ちょいメモ

amazon web service , PHP, Python を使ったときのメモ。日本語でググってもわからなかった事を中心に。

Django テンプレートで楽する技(初心者向け)

高機能はDjango、なかなか全貌が把握できてませんが、こりゃ楽だぁ〜と思った機能を3つ紹介。

数値に桁区切りのカンマを入れる方法

humanize というアプリが同梱されているので、これを使うことでテンプレートだけで対応が可能でした。
humanize は templatetags がいくつか入ってるアプリです。カンマ区切りの intcomma 以外は、日本語アプリではあまり使わなさそうだな。

使い方は3ステップ+αで完了。

  1. settings.py の INSTALLED_APPS に django.contrib.humanize を追加
  2. テンプレートにロードの記述 {% load humanize %} を追加
  3. 該当箇所に intcomma フィルタを適用

ただしロケールにjaを使っている場合には、もう一つおまじないが必要でした

  1. settings.py で NUMBER_GROUPING = 3 を追加 ※ja locale ではデフォルトで設定されてない為

テンプレート系の処理の為か、エラーも表示されないので注意が必要ですね。

ちなみに、Pythonの言語側でやるときは、こんなふうに対応するようです。

>>> '{:,d}'.format(1234567890)
'1,234,567,890'

繰り返しでてくるhtmlを使い回す (組み込みタグ include)

テンプレートをいくつか書いてると出てくるのが、同じようなhtml箇所の散見。
こんな時には include 使って別ファイル化して管理するのが良さそうです。

今回、ナビゲーションに関わる部分をヘッダーとフッターに付けたかったので、該当部分を別ファイル化してincludeで読み込み。

注意点としては、前述 humanize のような load が必要なものは、親ではなく、include先の別ファイル側で実施するという点でしょうか?
# たぶんですが、include先は同じコンテキストではあるものの、個別にレンダリングされる為だと思われます

テンプレートタグやフィルタへと進む

includeではプロパティぐらいは扱えますが、処理がかけません。もっと楽したくなったときには、テンプレートタグなどに進むと良いのだと思います。

このドキュメントで紹介されているのが、次の2つ。いずれもアプリケーション内に templatetags ディレクトリを作成して作業します。

  • テンプレートフィルタ
  • テンプレートタグ

まだ一部しか使えてませんが、以前テンプレートタグ (simple_tag) を使ってみたので参考に。


# このあたりも使いこなせると、中級レベルに進めるのかもしれません。