Ticket #6346: url_patch.diff

File url_patch.diff, 2.2 KB (added by sorl, 7 years ago)
  • django/template/defaulttags.py

    old new  
    356356
    357357    def render(self, context):
    358358        from django.core.urlresolvers import reverse, NoReverseMatch
    359         args = [arg.resolve(context) for arg in self.args]
    360         kwargs = dict([(smart_str(k,'ascii'), v.resolve(context))
    361                        for k, v in self.kwargs.items()])
     359        args = []
     360        for arg in self.args:
     361            if arg[0] in ["'", '"'] and arg[0] == arg[-1]:
     362                arg = arg[1:-1]
     363            else:
     364                try:
     365                    arg = Variable(arg).resolve(context)
     366                except VariableDoesNotExist:
     367                    pass
     368            args.append(arg)
     369        kwargs = {}
     370        for k, v in self.kwargs.items():
     371            if v[0] in ["'", '"'] and v[0] == v[-1]:
     372                v = v[1:-1]
     373            else:
     374                try:
     375                    v = Variable(v).resolve(context)
     376                except VariableDoesNotExist:
     377                    pass
     378            kwargs[smart_str(k,'ascii')] = v
    362379        try:
    363380            return reverse(self.view_name, args=args, kwargs=kwargs)
    364381        except NoReverseMatch:
    365             try:
    366                 project_name = settings.SETTINGS_MODULE.split('.')[0]
    367                 return reverse(project_name + '.' + self.view_name,
    368                                args=args, kwargs=kwargs)
    369             except NoReverseMatch:
    370                 return ''
     382            project_name = settings.SETTINGS_MODULE.split('.')[0]
     383            return reverse(project_name + '.' + self.view_name,
     384                           args=args, kwargs=kwargs)
    371385
    372386class WidthRatioNode(Node):
    373387    def __init__(self, val_expr, max_expr, max_width):
     
    10471061            if '=' in arg:
    10481062                k, v = arg.split('=', 1)
    10491063                k = k.strip()
    1050                 kwargs[k] = parser.compile_filter(v)
     1064                kwargs[k] = v
    10511065            else:
    1052                 args.append(parser.compile_filter(arg))
     1066                args.append(arg)
    10531067    return URLNode(bits[1], args, kwargs)
    10541068url = register.tag(url)
    10551069
Back to Top