- bits.append(self._render_node(context, child, request))
- context['navloop'] = context['navloop']['parentloop']
- context['item'] = item
- context['children'] = mark_safe(u''.join(bits))
- context['active'] = item.is_active(request)
- context['active_descendants'] = item.has_active_descendants(request)
- rendered = self.template_nodes.render(context)
+
+ # Set on loop_dict and context for backwards-compatibility.
+ # Eventually only allow access through the loop_dict.
+ loop_dict['item'] = context['item'] = item
+ loop_dict['active'] = context['active'] = item.is_active(request)
+ loop_dict['active_descendants'] = context['active_descendants'] = item.has_active_descendants(request)
+
+ # Then render the nodelist bit by bit.
+ for node in self.template_nodes:
+ if isinstance(node, RecurseNavigationMarker):
+ # Then recurse!
+ children = items.get_children()
+ bits.append(self._render_items(children, context, request))
+ elif isinstance(node, template.VariableNode) and node.filter_expression.var.lookups == (u'children',):
+ # Then recurse! This is here for backwards-compatibility only.
+ children = items.get_children()
+ bits.append(self._render_items(children, context, request))
+ else:
+ bits.append(node.render(context))