from django.template import defaulttags, VariableDoesNotExist, Variable class ResolvingURLNode(defaulttags.URLNode): def render(self, context): original_view_name = self.view_name try: self.view_name = Variable(self.view_name).resolve(context) except VariableDoesNotExist: pass ret = super(defaulttags.URLNode, self).render(context) # restore view_name in case this node is reused (e.g in a loop) in # which case the variable might resolve to something else in the next iteration) self.view_name = original_view_name return ret defaulttags.URLNode = ResolvingURLNode