小話〜djangoのdateフィルターについて


今回のお題

今回は、djangoテンプレートのdateフィルターについて取り上げます。

例によって自分用のメモですね。

目次

  • フィルターとは
  • dateフィルターとは
  • フォーマットの規定値について

フィルターとは

まずはフィルターそのものについての説明を念の為。

フィルターとは、djangoテンプレートの{{}}で囲まれた値を加工するためのものです。

以下のように値とフィルター名を|で区切って使います。

<!-- fugaがフィルター名 -->
{{ user.nickname|fuga }}

dateフィルターとは

dateフィルターは年月日の表示形式を加工するためのものです。

以下のように|date:"フォーマット形式"という形で記述します。

{{ user.birthday|date:"Y年n月j日" }}

これで~年~月~日という形式で表示されるようになりました。

(n月j日なので一桁の数字は0詰めになりません。0詰めがよければm月d日表記にしましょう。)

おまけ:フォーマットの規定値について

dateフィルターをかけない場合のフォーマットは、基本的にY年n月j日表記になっているかと思います。

この仕組みが気になったので簡単にではありますが調べてみました。

まず、年月日のフォーマットの形式にはDATE_FORMATという値が関わっているようです。

そして、公式ドキュメントではDATE_FORMATについて以下のように書かれていました。

DATE_FORMAT¶
Default: 'N j, Y' (e.g. Feb. 4, 2003)

The default formatting to use for displaying date fields in any part of the system. Note that if USE_L10N is set to True, then the locale-dictated format has higher precedence and will be applied instead.

つまり

基本はN j, Y形式だがsettings.pyにおいてUSE_L10N = Trueとなっていれば代わりに地域設定に応じた値が使われる。

ということですね。

以上をまとめると、
- USE_L10N = Trueであれば年月日は基本的にY年n月j日形式で表示される。
- 表示形式を規定値から変更したい場合はUSE_L10N = Falseに変更した上で、settigs.pyでDATE_FORMATの値を設定し直す。
- 個別に変更したい場合はdateフィルターを使う。

ということになります。

日付の取り扱いは若干苦手意識があるのですが、早く慣れていきたいですね。