From dcd062f1223d9fd976ff8a2cbe0a0b0fe213038a Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 8 Jun 2015 15:57:12 -0400 Subject: [PATCH] Update Link class to accept callables for a link's kwargs --- mayan/apps/navigation/classes.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/mayan/apps/navigation/classes.py b/mayan/apps/navigation/classes.py index 854d9c22e2..508350e9bd 100644 --- a/mayan/apps/navigation/classes.py +++ b/mayan/apps/navigation/classes.py @@ -175,17 +175,23 @@ class Link(object): else: args = [Variable(self.args)] - kwargs = {key: Variable(value) for key, value in self.kwargs.iteritems()} - - # Use Django's exact {% url %} code to resolve the link - node = URLNode(view_name=view_name, args=args, kwargs=kwargs, asvar=None) - # If we were passed an instance of the view context object we are # resolving, inject it into the context. This help resolve links for # object lists. if resolved_object: context['resolved_object'] = resolved_object + try: + self.kwargs = self.kwargs(context) + except TypeError: + # Is not a callable + pass + + kwargs = {key: Variable(value) for key, value in self.kwargs.iteritems()} + + # Use Django's exact {% url %} code to resolve the link + node = URLNode(view_name=view_name, args=args, kwargs=kwargs, asvar=None) + resolved_link.url = node.render(context) # This is for links that should be displayed but that are not clickable