1
2
3
4 """
5 pytils.dt templatetags for Django web-framework
6 """
7
8 __id__ = __revision__ = "$Id: pytils_dt.py 29 2006-10-21 08:28:27Z the.pythy $"
9 __url__ = "$URL: https://pythy.googlecode.com/svn/trunk/pytils/pytils/templatetags/pytils_dt.py $"
10
11 import time
12 from django import template, conf
13 from pytils import dt, utils
14
15 register = template.Library()
16 encoding = conf.settings.DEFAULT_CHARSET
17 debug = conf.settings.DEBUG
18 show_value = getattr(conf.settings, 'PYTILS_SHOW_VALUES_ON_ERROR', False)
19
20
21
22
23
24
25 if debug:
26 default_value = "unknown: %(error)s"
27 default_uvalue = u"unknown: %(error)s"
28 elif show_value:
29 default_value = "%(value)s"
30 default_uvalue = u"%(value)s"
31 else:
32 default_value = ""
33 default_uvalue = u""
34
35
36
38 """
39 Display distance of time from current time.
40
41 Parameter is an accuracy level (deafult is 1).
42 Value must be numeral (i.e. time.time() result) or
43 datetime.datetime (i.e. datetime.datetime.now()
44 result).
45
46 Examples::
47 {{ some_time|distance_of_time }}
48 {{ some_dtime|distance_of_time:2 }}
49 """
50 try:
51 res = utils.provide_str(
52 dt.distance_of_time_in_words(from_time, accuracy),
53 encoding,
54 default=default_value)
55 except Exception, err:
56
57 try:
58 default_distance = "%s seconds" % str(int(time.time() - from_time))
59 except Exception:
60 default_distance = ""
61 res = default_value % {'error': err, 'value': default_distance}
62 return res
63
64 -def ru_strftime(date, format="%d.%m.%Y", inflected_day=False):
65 """
66 Russian strftime, formats date with given format.
67
68 Value is a date (supports datetime.date and datetime.datetime),
69 parameter is a format (string). For explainings about format,
70 see documentation for original strftime:
71 http://docs.python.org/lib/module-time.html
72
73 Examples::
74 {{ some_date|ru_strftime:"%d %B %Y, %A" }}
75 """
76 try:
77 uformat = utils.provide_unicode(format, encoding, default=u"%d.%m.%Y")
78 ures = dt.ru_strftime(uformat,
79 date,
80 inflected=True,
81 inflected_day=inflected_day)
82 res = utils.provide_str(ures, encoding)
83 except Exception, err:
84
85 try:
86 default_date = date.strftime(format)
87 except Exception:
88 default_date = ""
89 res = default_value % {'error': err, 'value': default_date}
90 return res
91
93 """
94 Russian strftime with inflected day, formats date
95 with given format (similar to ru_strftime),
96 also inflects day in proper form.
97
98 Examples::
99 {{ some_date|ru_strftime_inflected:"in %A (%d %B %Y)"
100 """
101 return ru_strftime(date, format, inflected_day)
102
103
104 register.filter('distance_of_time', distance_of_time)
105 register.filter('ru_strftime', ru_strftime)
106 register.filter('ru_strftime_inflected', ru_strftime_inflected)
107