ほんじゃらねっと

ダイエット中プログラマのブログ

ある日付が指定日数より後かどうかを判定するカスタムフィルタ

ページ上で3日以内に更新された記事に「New!」と表示したりする場合に使えるフィルタを作ってみた。


datetime型と、yyyy-mm-dd形式の文字列の両方に対応。
がんばったらもっと色々なフォーマットに対応できるだろうけど、がんばれなかった。
使う時はエラー処理も入れなきゃ。

# -*- coding: utf-8 -*-
from datetime import date, timedelta
from django import template
register = template.Library()
@register.filter
def is_new(d, days):
if isinstance(d, unicode):
target_day = date(*[int(p) for p in d.split("-")])
else:
target_day = d.date()
today = date.today()
last_day = today - timedelta(days)
if target_day > last_day:
return True
else:
return False


こんな感じで使う。

...
{% for news in news_list %}
<li>
{% if news.insert_date|is_new:7 %}<img src="/img/icon/new.gif" />{% endif %}
<span>{{ news.insert_date|date:"Y/m/d" }}</span>
<span>{{ news.title }}</span>
</li>
{% endfor %}
...