Ticket #12072: patch-12072-c.diff

File patch-12072-c.diff, 4.1 KB (added by alexdutton, 5 years ago)

Tidier patch

  • tests/regressiontests/templates/tests.py

     
    10311031            'url08': (u'{% url метка_оператора v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
    10321032            'url09': (u'{% url метка_оператора_2 tag=v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'),
    10331033            'url10': ('{% url regressiontests.templates.views.client_action id=client.id,action="two words" %}', {'client': {'id': 1}}, '/url_tag/client/1/two%20words/'),
     1034            'url11': ('{% url regressiontests.templates.views.client_action id=client.id,action="==" %}', {'client': {'id': 1}}, '/url_tag/client/1/==/'),
     1035            'url12': ('{% url regressiontests.templates.views.client_action id=client.id,action="," %}', {'client': {'id': 1}}, '/url_tag/client/1/,/'),
     1036            'url12': ('{% url regressiontests.templates.views.client_action id=client.id,action=arg|join:"-" %}', {'client': {'id': 1}, 'arg':['a','b']}, '/url_tag/client/1/a-b/'),
    10341037
    10351038            # Failures
    10361039            'url-fail01': ('{% url %}', {}, template.TemplateSyntaxError),
    10371040            'url-fail02': ('{% url no_such_view %}', {}, urlresolvers.NoReverseMatch),
    10381041            'url-fail03': ('{% url regressiontests.templates.views.client %}', {}, urlresolvers.NoReverseMatch),
     1042            'url-fail04': ('{% url view id, %}', {}, template.TemplateSyntaxError),
     1043            'url-fail05': ('{% url view id= %}', {}, template.TemplateSyntaxError),
     1044            'url-fail06': ('{% url view a.id=id %}', {}, template.TemplateSyntaxError),
     1045            'url-fail07': ('{% url view a.id!id %}', {}, template.TemplateSyntaxError),
     1046            'url-fail08': ('{% url view id="unterminatedstring %}', {}, template.TemplateSyntaxError),
     1047            'url-fail09': ('{% url view id=", %}', {}, template.TemplateSyntaxError),
    10391048
    10401049            # {% url ... as var %}
    10411050            'url-asvar01': ('{% url regressiontests.templates.views.index as url %}', {}, ''),
  • django/template/defaulttags.py

     
    10711071    return TemplateTagNode(tag)
    10721072templatetag = register.tag(templatetag)
    10731073
     1074# Regex for URL arguments including filters
     1075value = '''(?:(?:'[^']*')|(?:"[^"]*")|(?:[\w\.-]+))'''
     1076value = r"(%(value)s(?:\|%(name)s(?::%(value)s)?)*)" % {'name':'(?:\w+)', 'value':value}
     1077url_arg_re = re.compile('''
     1078        %(name)s=%(value)s
     1079        |
     1080        %(value)s
     1081    ''' % {
     1082            'name': '(\w+)',
     1083            'value': value
     1084        }, re.VERBOSE)
     1085
    10741086def url(parser, token):
    10751087    """
    10761088    Returns an absolute URL matching given view with its parameters.
     
    11181130                asvar = bits.next()
    11191131                break
    11201132            else:
    1121                 for arg in bit.split(","):
    1122                     if '=' in arg:
    1123                         k, v = arg.split('=', 1)
    1124                         k = k.strip()
    1125                         kwargs[k] = parser.compile_filter(v)
    1126                     elif arg:
    1127                         args.append(parser.compile_filter(arg))
     1133                for i, match in enumerate(url_arg_re.finditer(bit)):
     1134                    if (i == 0 and match.start() != 0) or \
     1135                          (i > 0 and (bit[end:match.start()] != ',')):
     1136                        raise TemplateSyntaxError("Malformed arguments to url tag")
     1137                    end = match.end()
     1138                    name, value = match.group(1), match.group(2) or match.group(3)
     1139                    if name:
     1140                        kwargs[name] = parser.compile_filter(value)
     1141                    else:
     1142                        args.append(parser.compile_filter(value))
     1143                if end != len(bit):
     1144                    raise TemplateSyntaxError("Malformed arguments to url tag")
     1145
    11281146    return URLNode(viewname, args, kwargs, asvar)
    11291147url = register.tag(url)
    11301148
Back to Top