import re from django import template register = template.Library() @register.simple_tag def format_date_range(from_date, to_date): """ >>> import datetime >>> format_date_range(datetime.date(2009,1,15), datetime.date(2009,1,20)) '15. - 20.01.2009.' >>> format_date_range(datetime.date(2009,1,15), datetime.date(2009,2,20)) '15.01. - 20.02.2009.' >>> format_date_range(datetime.date(2009,1,15), datetime.date(2010,2,20)) '15.01.2009. - 20.02.2010.' >>> format_date_range(datetime.date(2009,1,15), datetime.date(2010,1,20)) '15.01.2009. - 20.01.2010.' Use in django templates: {% load date_range %} {% format_date_range exhibition.start_on exhibition.end_on %} """ from_format = to_format = '%d.%m.%Y.' if (from_date.year == to_date.year): from_format = from_format.replace('%Y.', '') if (from_date.month == to_date.month): from_format = from_format.replace('%m.', '') return " - ".join((from_date.strftime(from_format), to_date.strftime(to_format), )) def _test(): import doctest doctest.testmod() if __name__ == "__main__": _test()