summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
Diffstat (limited to 'django')
-rw-r--r--django/urls/resolvers.py30
1 files changed, 19 insertions, 11 deletions
diff --git a/django/urls/resolvers.py b/django/urls/resolvers.py
index 3d3bbfd38a..13043835dd 100644
--- a/django/urls/resolvers.py
+++ b/django/urls/resolvers.py
@@ -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):