from django.template import Node, NodeList from django.template import TemplateSyntaxError, VariableDoesNotExist from django.template import Library import re # For Python 2.3 if not hasattr(__builtins__, 'set'): from sets import Set as set register = Library() variable_re = re.compile(r'[\w._\|\"\']+') string_re = re.compile(r'^([\"\']).*\1$') TAGNAME = 'pyif' # Hopefully this can replace django's built-in if tag class IfNode(Node): def __init__(self, expression, variables, nodelist_true, nodelist_false): self.expression = expression self.variables = variables self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false def __repr__(self): return "" def __iter__(self): for node in self.nodelist_true: yield node for node in self.nodelist_false: yield node def get_nodes_by_type(self, nodetype): nodes = [] if isinstance(self, nodetype): nodes.append(self) nodes.extend(self.nodelist_true.get_nodes_by_type(nodetype)) nodes.extend(self.nodelist_false.get_nodes_by_type(nodetype)) return nodes def render(self, context): variable_context = {} expression = self.expression for variable in self.variables: try: value = variable.resolve(context, True) except VariableDoesNotExist: value = None context_name = 'var%s' % len(variable_context) expression = re.sub(r'(?