Merge branch 'shipherd_hotfix' into release
authorStephen Burrows <stephen.r.burrows@gmail.com>
Wed, 4 May 2011 19:49:35 +0000 (15:49 -0400)
committerStephen Burrows <stephen.r.burrows@gmail.com>
Wed, 4 May 2011 19:49:35 +0000 (15:49 -0400)
1  2 
philo/contrib/shipherd/templatetags/shipherd.py

@@@ -60,6 -60,10 +60,6 @@@ class LazyNavigationRecurser(object)
                        context['item'] = item
                        context['children'] = self.__class__(self.template_nodes, item.get_children(), context, request)
                        
 -                      # Django 1.2.X compatibility - a lazy recurser will not be called if accessed as a template variable.
 -                      if django_version < (1,3):
 -                              context['children'] = context['children']()
 -                      
                        # Then render the nodelist bit by bit.
                        for node in self.template_nodes:
                                bits.append(node.render(context))
  
  
  class RecurseNavigationNode(template.Node):
-       def __init__(self, template_nodes, instance_var, key):
+       def __init__(self, template_nodes, instance_var, key_var):
                self.template_nodes = template_nodes
                self.instance_var = instance_var
-               self.key = key
+               self.key_var = key_var
        
        def render(self, context):
                try:
                        return ''
                
                instance = self.instance_var.resolve(context)
+               key = self.key_var.resolve(context)
+               
+               # Fall back on old behavior if the key doesn't seem to be a variable.
+               if not key:
+                       token = self.key_var.token
+                       if token[0] not in ["'", '"'] and '.' not in token:
+                               key = token
+                       else:
+                               return settings.TEMPLATE_STRING_IF_INVALID
                
                try:
-                       items = instance.navigation[self.key]
+                       items = instance.navigation[key]
                except:
                        return settings.TEMPLATE_STRING_IF_INVALID
                
@@@ -135,17 -148,11 +144,11 @@@ def recursenavigation(parser, token)
                raise template.TemplateSyntaxError(_('%s tag requires two arguments: a node and a navigation section name') % bits[0])
        
        instance_var = parser.compile_filter(bits[1])
-       key = bits[2]
-       
-       template_nodes = parser.parse(('recurse', 'endrecursenavigation',))
-       
-       token = parser.next_token()
-       if token.contents == 'recurse':
-               template_nodes.append(RecurseNavigationMarker())
-               template_nodes.extend(parser.parse(('endrecursenavigation')))
-               parser.delete_first_token()
+       key_var = parser.compile_filter(bits[2])
        
-       return RecurseNavigationNode(template_nodes, instance_var, key)
+       template_nodes = parser.parse(('endrecursenavigation',))
+       token = parser.delete_first_token()
+       return RecurseNavigationNode(template_nodes, instance_var, key_var)
  
  
  @register.filter