1
from django.utils.translation import ungettext, ugettext as _
2
from django.utils.encoding import force_unicode
3
from django import template
4
from django.template import defaultfilters
5
from datetime import date
8
register = template.Library()
12
Converts an integer to its ordinal as a string. 1 is '1st', 2 is '2nd',
13
3 is '3rd', etc. Works for any integer.
19
t = (_('th'), _('st'), _('nd'), _('rd'), _('th'), _('th'), _('th'), _('th'), _('th'), _('th'))
20
if value % 100 in (11, 12, 13): # special case
21
return u"%d%s" % (value, t[0])
22
return u'%d%s' % (value, t[value % 10])
23
ordinal.is_safe = True
24
register.filter(ordinal)
28
Converts an integer to a string containing commas every three digits.
29
For example, 3000 becomes '3,000' and 45000 becomes '45,000'.
31
orig = force_unicode(value)
32
new = re.sub("^(-?\d+)(\d{3})", '\g<1>,\g<2>', orig)
37
intcomma.is_safe = True
38
register.filter(intcomma)
42
Converts a large integer to a friendly text representation. Works best for
43
numbers over 1 million. For example, 1000000 becomes '1.0 million', 1200000
44
becomes '1.2 million' and '1200000000' becomes '1.2 billion'.
49
if value < 1000000000:
50
new_value = value / 1000000.0
51
return ungettext('%(value).1f million', '%(value).1f million', new_value) % {'value': new_value}
52
if value < 1000000000000:
53
new_value = value / 1000000000.0
54
return ungettext('%(value).1f billion', '%(value).1f billion', new_value) % {'value': new_value}
55
if value < 1000000000000000:
56
new_value = value / 1000000000000.0
57
return ungettext('%(value).1f trillion', '%(value).1f trillion', new_value) % {'value': new_value}
59
intword.is_safe = False
60
register.filter(intword)
64
For numbers 1-9, returns the number spelled out. Otherwise, returns the
65
number. This follows Associated Press style.
71
if not 0 < value < 10:
73
return (_('one'), _('two'), _('three'), _('four'), _('five'), _('six'), _('seven'), _('eight'), _('nine'))[value-1]
74
apnumber.is_safe = True
75
register.filter(apnumber)
77
def naturalday(value, arg=None):
79
For date values that are tomorrow, today or yesterday compared to
80
present day returns representing string. Otherwise, returns a string
81
formatted according to settings.DATE_FORMAT.
84
value = date(value.year, value.month, value.day)
85
except AttributeError:
86
# Passed value wasn't a date object
89
# Date arguments out of range
91
delta = value - date.today()
96
elif delta.days == -1:
97
return _(u'yesterday')
98
return defaultfilters.date(value, arg)
99
register.filter(naturalday)