From 8359c05ca061ba012805e7ba74da1f9dde73941d Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Wed, 17 Mar 2010 18:51:37 -0700 Subject: [PATCH] Support named groups in url pattern regexes. Note that either all or none of the groups to be passed to the handler must be named. --- tornado/web.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tornado/web.py b/tornado/web.py index ae7f7f0b37..d901c4f674 100644 --- a/tornado/web.py +++ b/tornado/web.py @@ -995,6 +995,7 @@ def __call__(self, request): transforms = [t(request) for t in self.transforms] handler = None args = [] + kwargs = {} handlers = self._get_host_handlers(request) if not handlers: handler = RedirectHandler( @@ -1004,7 +1005,14 @@ def __call__(self, request): match = spec.regex.match(request.path) if match: handler = spec.handler_class(self, request, **spec.kwargs) - args = match.groups() + # Pass matched groups to the handler. Since + # match.groups() includes both named and unnamed groups, + # we want to use either groups or groupdict but not both. + kwargs = match.groupdict() + if kwargs: + args = [] + else: + args = match.groups() break if not handler: handler = ErrorHandler(self, request, 404) @@ -1015,7 +1023,7 @@ def __call__(self, request): RequestHandler._templates = None RequestHandler._static_hashes = {} - handler._execute(transforms, *args) + handler._execute(transforms, *args, **kwargs) return handler def reverse_url(self, name, *args):