Changeset dd6edfb for remit


Ignore:
Timestamp:
Jul 25, 2010, 1:50:01 AM (15 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master, client
Children:
3e372da
Parents:
bef7191
git-author:
Alex Dehnert <adehnert@…> (07/25/10 01:50:01)
git-committer:
Alex Dehnert <adehnert@…> (07/25/10 01:50:01)
Message:

Add {%ifin%} templatetag

File:
1 edited

Legend:

Unmodified
Added
Removed
  • remit/util/templatetags/misc.py

    re1086bd rdd6edfb  
    11from django import template
     2from django.template import Node, NodeList, Template, Context, Variable
    23import finance_core.models
    34
     
    3031    else: return 'zero'
    3132
     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
    3268register.filter('layer_num', finance_core.models.layer_num)
    3369register.filter('layer_name', finance_core.models.layer_name)
Note: See TracChangeset for help on using the changeset viewer.