yiskw note

機械学習やプログラミングについて気まぐれで書きます

Djangoのテンプレートで使えるフィルターのまとめ


Djangoのテンプレートで使えるフィルターについて調べたので,こちらにメモを残しておきます.

フィルターの書き方

{{}}で囲まれた変数に対して,|FILTERとすることで,変数に対して処理を行うことができます. 以下はvalueという変数に対して,2を加える処理を行うフィルターです.

{{ value:add:"2" }}

valueの値が3だったとき,ページ上では5と表示されます.

他にも,

{{ value|capfirst }}

とすることで,先頭の文字を大文字にすることができます. valueが"django"の場合,ページ上ではDjangoと表示されます.

ここからはよく使うフィルターを紹介していきます.

date

{{ value|date:"D d M Y" }}

valuedatetimeオブジェクトの時に,指定した書式で日付を表示してくれます. この例の場合,"Tue 04 May 2021"と表示されます.

日付の表示方法に関して詳しくはこちらを参照してください.

default

{{ value|default:"nothing" }}

valuepythonFalseに相当する値の時(e.g. 空文字列,空のリストなど),コロン以下の値を返します.

上の例ではvalueが空文字列の時,"nothing"を返します.

dictsort

辞書型の変数を特定のキーでソートします.for文と組み合わせると以下のようなことができます.

変数books

[
    {'title': '1984', 'author': {'name': 'George', 'age': 45}},
    {'title': 'Timequake', 'author': {'name': 'Kurt', 'age': 75}},
    {'title': 'Alice', 'author': {'name': 'Lewis', 'age': 33}},
]

テンプレート内の記述

{% for book in books|dictsort:"author.age" %}
    * {{ book.title }} ({{ book.author.name }})
{% endfor %}

出力

* Alice (Lewis)
* 1984 (George)
* Timequake (Kurt)

これに加えて,辞書型を逆順にソートするdictsortreversedというフィルターもあります.

length

{{ value|length }}

valueの長さを返します.リストの場合は要素数,文字列の場合は文字数を返します.

linebreaksbr

{{ value|linebreaksbr }}

文字列中の改行文字を全てHTMLの<br>に変換します.

このフィルターを追加しないと,表示画面で改行が反映されません.

参考ページ

lower

{{ value|lower }}

文字列を全て小文字にして表示します.

全てを大文字にするにはupperフィルターを使用します.

safe

{{ value|safe }}

HTMLタグをエスケープさせず,レンダリングさせて表示させます.

参考ページ

truncatechars

{{ value|truncatechars:7 }}

指定した文字数未満になるように,文字列を省略させます. 上の例でvalueが"Joel is a slug"の時,表示される文字は"Joel i…"となります.

truncatewords

{{ value|truncatewords:2 }}

指定した単語数以下になるように,文字列を省略させます.

参考