1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import datetime
27 import traceback
28 import logging
29
30 from django.conf import settings
31 from django import template
32
33 register = template.Library()
34
35 logger = logging.getLogger('custom_tags')
41
44 """
45 Truncates a string after a given number of chars
46 Argument: Number of chars to truncate after
47 """
48 try:
49 length = int(arg)
50 except ValueError:
51 return value
52 if not isinstance(value, basestring):
53 value = str(value)
54 if (len(value) > length):
55 return value[:length] + "..."
56 else:
57 return value
58
61 """
62 Truncates a string after a given number of chars
63 Argument: Number of chars to truncate befor
64 """
65 try:
66 length = int(arg)
67 except ValueError:
68 return value
69 if not isinstance(value, basestring):
70 value = str(value)
71 if (len(value) > length):
72 return "..."+value[len(value)-length:]
73 else:
74 return value
75
78 try:
79 length = int(arg)
80 except ValueError:
81 return value
82 front = length/2-3
83 end = length/2-3
84
85 if not isinstance(value, basestring):
86 value = str(value)
87 try:
88 l = len(value)
89 if l < length:
90 return value
91 elif l >= length:
92 return value[:front]+"..."+value[l-end:]
93 except Exception, x:
94 logger.error(traceback.format_exc())
95 return value
96
97
98 @register.tag
100 try:
101 tag_name, option = token.split_contents()
102 except ValueError:
103 raise template.TemplateSyntaxError, "%r tag requires a single argument" % token.contents[0]
104 return SettingNode( option )
105
108 self.option = option
109
110 - def render ( self, context ):
111
112 try:
113 return str(settings.__getattr__(self.option))
114 except:
115 return ""
116
118 - def __init__(self, quantity, single, plural):
119 self.quantity = template.Variable(quantity)
120 self.single = template.Variable(single)
121 self.plural = template.Variable(plural)
122
124 if self.quantity.resolve(context) == 1:
125 return u'%s' % self.single.resolve(context)
126 else:
127 return u'%s' % self.plural.resolve(context)
128
129 @register.tag(name="plural")
131 """
132 Usage: {% plural quantity name_singular name_plural %}
133
134 This simple version only works with template variable since we will use blocktrans for strings.
135 """
136
137 try:
138
139 tag_name, quantity, single, plural = token.split_contents()
140 except ValueError:
141 raise template.TemplateSyntaxError, "%r tag requires exactly three arguments" % token.contents.split()[0]
142
143 return PluralNode(quantity, single, plural)
144