1
0
mirror of https://github.com/django/django.git synced 2025-10-27 15:46:10 +00:00

Fixed #35518 -- Optimized RoutePattern by using string operations for converter-less routes.

This commit is contained in:
Jake Howard
2024-06-10 17:32:08 +01:00
committed by Sarah Boyce
parent f66c79e93d
commit f920937c8a
2 changed files with 25 additions and 11 deletions

View File

@@ -322,17 +322,25 @@ class RoutePattern(CheckURLMixin):
self.name = name
def match(self, path):
match = self.regex.search(path)
if match:
# RoutePattern doesn't allow non-named groups so args are ignored.
kwargs = match.groupdict()
for key, value in kwargs.items():
converter = self.converters[key]
try:
kwargs[key] = converter.to_python(value)
except ValueError:
return None
return path[match.end() :], (), kwargs
# Only use regex overhead if there are converters.
if self.converters:
if match := self.regex.search(path):
# RoutePattern doesn't allow non-named groups so args are ignored.
kwargs = match.groupdict()
for key, value in kwargs.items():
converter = self.converters[key]
try:
kwargs[key] = converter.to_python(value)
except ValueError:
return None
return path[match.end() :], (), kwargs
# If this is an endpoint, the path should be exactly the same as the route.
elif self._is_endpoint:
if self._route == path:
return "", (), {}
# If this isn't an endpoint, the path should start with the route.
elif path.startswith(self._route):
return path.removeprefix(self._route), (), {}
return None
def check(self):