Djangoテンプレートのカスタムフィルタ

最近Djangoのテンプレート周りをさわっていてカスタムフィルタが簡単で便利だと思ったのでメモ。
(Djangoのバージョンは1.4です)

以下は一例ですが、Djangoのテンプレートではis演算子が使えないっぽくて今までモデルでNullBooleanFieldを使っている部分を以下のように書いていました。

{% if row.field == None %}
... # None
{% elif row.field %}
... # True
{% else %}
... # False

Noneの評価に==を使うのが気持ち悪いと思ったのがきっかけだったのですが、カスタムフィルタを作って以下のようになりました。

$project/templates/sample.html
{% load app_extras %}

{{ row.field|customfilter }}
$project/app/templatetags/app_extras.py
# coding: utf-8

from django import template

register = template.Library()

@register.filter(name='customfilter')
def customfilter(value):
    if value is None:
        return 'NONE'
    elif value:
        return 'TRUE'
    else:
        return 'FALSE'

テンプレートタグやフィルタを自作する — Django v1.0 documentation