2015年3月17日火曜日

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

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

templatetags ディレクトリを作成し、modelsやviewsと同じ階層に配置。
中身が空の __init__.py ファイルを作成。
polls/
  models.py
  templatetags/
    __init__.py
    app_filters.py
  views.py
/polls/templatetags/app_filters.py(フィルター処理)
from django import template

register = template.Library()

@register.filter(name='get_due_date_string')
def get_due_date_string(value):
    delta = value - date.today()

    if delta.days == 0:
        return "Today!"
    elif delta.days < 1:
        return "%s %s ago!" % (abs(delta.days),
            ("day" if abs(delta.days) == 1 else "days"))
    elif delta.days == 1:
        return "Tomorrow"
    elif delta.days > 1:
        return "In %s days" % delta.days
/templates/polls/index.html(テンプレートでの利用)
{% load app_filters %}
{{ poll.created_at|get_due_date_string }}

サイト全体で利用したいと思い、最初 /templatetags/app_filters.py に配置してしまい、しばらく悩みました。/polls/templatetags/app_filters.py のように、models 配下に作成するのがコツかなと思います。これで問題なく動くようになりました。


参考サイト
テンプレートタグやフィルタを自作する(Django documentation)
Django Tutorial: Making Your Own Template Filters(Paul Finn's Blog)

0 件のコメント:

コメントを投稿