source: remit/util/templatetags/misc.py

client
Last change on this file was dd6edfb, checked in by Alex Dehnert <adehnert@…>, 15 years ago

Add {%ifin%} templatetag

  • Property mode set to 100644
File size: 2.2 KB
Line 
1from django import template
2from django.template import Node, NodeList, Template, Context, Variable
3import finance_core.models
4
5register = template.Library()
6
7@register.filter
8def budgetarea_pathstr(value, arg=0):
9    if value:
10        return value.pathstr(skip=arg)
11    else: return ""
12
13@register.filter
14def approval_status(value):
15    from vouchers.models import APPROVAL_STATES
16    for num, name in APPROVAL_STATES:
17        if num == value: return name
18    else: return value
19
20@register.filter
21def approval_status_class(value):
22    from vouchers.models import APPROVAL_STATES
23    for num, name in APPROVAL_STATES:
24        if num == value: return name.lower()
25    else: return value
26
27@register.filter
28def sign(value):
29    if value > 0: return 'positive'
30    elif value < 0: return 'negative'
31    else: return 'zero'
32
33class IfInNode(Node):
34    def __init__(self, member, container, nodelist_true, nodelist_false, negate):
35        self.member, self.container = member, container
36        self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
37        self.negate = negate
38
39    def __repr__(self):
40        return "<IfInNode>"
41
42    def render(self, context):
43        member_val = self.member.resolve(context, True)
44        container_val = self.container.resolve(context, True)
45        res = member_val in container_val
46        if (self.negate and not res) or (not self.negate and res):
47            return self.nodelist_true.render(context)
48        return self.nodelist_false.render(context)
49
50def do_ifin(parser, token, negate):
51    bits = list(token.split_contents())
52    if len(bits) != 3:
53        raise TemplateSyntaxError, "%r takes two arguments" % bits[0]
54    end_tag = 'end' + bits[0]
55    nodelist_true = parser.parse(('else', end_tag))
56    token = parser.next_token()
57    if token.contents == 'else':
58        nodelist_false = parser.parse((end_tag,))
59        parser.delete_first_token()
60    else:
61        nodelist_false = NodeList()
62    member = parser.compile_filter(bits[1])
63    container = parser.compile_filter(bits[2])
64    return IfInNode(member, container, nodelist_true, nodelist_false, negate)
65register.tag("ifin", lambda x, y: do_ifin(x, y, False))
66
67
68register.filter('layer_num', finance_core.models.layer_num)
69register.filter('layer_name', finance_core.models.layer_name)
Note: See TracBrowser for help on using the repository browser.