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