X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/7838f389cf5ebed7c23b764581cd563d1865828c..26c548c5fe8c7cc7227b5f38cd27e0278442dd76:/contrib/shipherd/templatetags/shipherd.py diff --git a/contrib/shipherd/templatetags/shipherd.py b/contrib/shipherd/templatetags/shipherd.py index 8adef3e..019d240 100644 --- a/contrib/shipherd/templatetags/shipherd.py +++ b/contrib/shipherd/templatetags/shipherd.py @@ -2,6 +2,7 @@ from django import template from django.conf import settings from django.utils.safestring import mark_safe from philo.contrib.shipherd.models import Navigation +from philo.models import Node from mptt.templatetags.mptt_tags import RecurseTreeNode, cache_tree_children @@ -33,7 +34,16 @@ class RecurseNavigationNode(RecurseTreeNode): return '' instance = self.instance_var.resolve(context) - roots = cache_tree_children(Navigation.objects.closest_navigation(instance)) + + if isinstance(instance, Node): + qs = Navigation.objects.closest_navigation(instance) + elif hasattr(instance, '__iter__'): + # Is this the right way to check? + qs = instance + else: + return settings.TEMPLATE_STRING_IF_INVALID + + roots = cache_tree_children(qs) bits = [self._render_node(context, node, request) for node in roots] return ''.join(bits) @@ -64,7 +74,7 @@ def recursenavigation(parser, token): if len(bits) != 2: raise template.TemplateSyntaxError(_('%s tag requires an instance') % bits[0]) - instance_var = template.Variable(bits[1]) + instance_var = parser.compile_filter(bits[1]) template_nodes = parser.parse(('endrecursenavigation',)) parser.delete_first_token() @@ -74,4 +84,17 @@ def recursenavigation(parser, token): @register.filter def has_navigation(node): - return bool(Navigation.objects.closest_navigation(node).count()) \ No newline at end of file + return bool(Navigation.objects.closest_navigation(node).count()) + + +@register.filter +def navigation_host(node): + try: + return Navigation.objects.closest_navigation(node)[0].hosting_node + except: + return node + + +@register.filter +def targeting_navigation(node): + return Navigation.objects.closest_navigation(node).filter(target_node=node).order_by('level', 'lft') \ No newline at end of file