Reuse request, current_path and current_view variables when resolving links

This commit is contained in:
Roberto Rosario
2012-08-03 12:55:34 -04:00
parent a50cd33b38
commit d7ddbc2c62
2 changed files with 9 additions and 6 deletions

View File

@@ -59,7 +59,7 @@ class Link(object):
self.children_view_regex = children_view_regex or [] self.children_view_regex = children_view_regex or []
def resolve(self, context, request=None, current_path=None, current_view=None): def resolve(self, context, request=None, current_path=None, current_view=None):
# TODO: don't calculate these if passed in an argument # Don't calculate these if passed in an argument
request = request or Variable('request').resolve(context) request = request or Variable('request').resolve(context)
current_path = current_path or request.META['PATH_INFO'] current_path = current_path or request.META['PATH_INFO']
current_view = current_view or resolve_to_name(current_path) current_view = current_view or resolve_to_name(current_path)
@@ -214,7 +214,7 @@ def get_context_navigation_links(context, menu_name=None, links_dict=bound_links
current_path = request.META['PATH_INFO'] current_path = request.META['PATH_INFO']
current_view = resolve_to_name(current_path) current_view = resolve_to_name(current_path)
context_links = {} context_links = {}
# Don't fudge with the original global dictionary # Don't fudge with the original global dictionary
# TODO: fix this # TODO: fix this
links_dict = links_dict.copy() links_dict = links_dict.copy()
@@ -251,7 +251,7 @@ def get_context_navigation_links(context, menu_name=None, links_dict=bound_links
context_links.setdefault(None, []) context_links.setdefault(None, [])
for link in view_links: for link in view_links:
context_links[None].append(link.resolve(context)) context_links[None].append(link.resolve(context, request=request, current_path=current_path, current_view=current_view))
except KeyError: except KeyError:
pass pass
@@ -263,7 +263,7 @@ def get_context_navigation_links(context, menu_name=None, links_dict=bound_links
context_links.setdefault(resolved_object_reference, []) context_links.setdefault(resolved_object_reference, [])
for link in object_links: for link in object_links:
context_links[resolved_object_reference].append(link.resolve(context)) context_links[resolved_object_reference].append(link.resolve(context, request=request, current_path=current_path, current_view=current_view))
except KeyError: except KeyError:
pass pass

View File

@@ -21,10 +21,13 @@ logger = logging.getLogger(__name__)
class TopMenuNavigationNode(Node): class TopMenuNavigationNode(Node):
def render(self, context): def render(self, context):
context['menu_links'] = [menu.get('link').resolve(context) for menu in main_menu.getchildren()] request = Variable('request').resolve(context)
current_path = request.META['PATH_INFO']
current_view = resolve_to_name(current_path)
context['menu_links'] = [menu.get('link').resolve(context, request=request, current_path=current_path, current_view=current_view) for menu in main_menu.getchildren()]
return '' return ''
@register.tag @register.tag
def get_top_menu_links(parser, token): def get_top_menu_links(parser, token):
return TopMenuNavigationNode() return TopMenuNavigationNode()