Ticket #6346: url_patch.2.diff

File url_patch.2.diff, 2.0 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:
     
    367384                return reverse(project_name + '.' + self.view_name,
    368385                               args=args, kwargs=kwargs)
    369386            except NoReverseMatch:
    370                 return ''
     387                if settings.TEMPLATE_DEBUG:
     388                    raise
     389                else:
     390                    return ''
    371391
    372392class WidthRatioNode(Node):
    373393    def __init__(self, val_expr, max_expr, max_width):
     
    10471067            if '=' in arg:
    10481068                k, v = arg.split('=', 1)
    10491069                k = k.strip()
    1050                 kwargs[k] = parser.compile_filter(v)
     1070                kwargs[k] = v
    10511071            else:
    1052                 args.append(parser.compile_filter(arg))
     1072                args.append(arg)
    10531073    return URLNode(bits[1], args, kwargs)
    10541074url = register.tag(url)
    10551075
Back to Top