summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/urls/resolvers.py3
-rw-r--r--tests/urlpatterns/tests.py5
2 files changed, 8 insertions, 0 deletions
diff --git a/django/urls/resolvers.py b/django/urls/resolvers.py
index 2154a46320..2ff8b2c775 100644
--- a/django/urls/resolvers.py
+++ b/django/urls/resolvers.py
@@ -8,6 +8,7 @@ attributes of the resolved URL match.
import functools
import inspect
import re
+import string
from importlib import import_module
from urllib.parse import quote
@@ -206,6 +207,8 @@ def _route_to_regex(route, is_endpoint=False):
For example, 'foo/<int:pk>' returns '^foo\\/(?P<pk>[0-9]+)'
and {'pk': <django.urls.converters.IntConverter>}.
"""
+ if not set(route).isdisjoint(string.whitespace):
+ raise ImproperlyConfigured("URL route '%s' cannot contain whitespace." % route)
original_route = route
parts = ['^']
converters = {}
diff --git a/tests/urlpatterns/tests.py b/tests/urlpatterns/tests.py
index 3c41104506..92c4e6399e 100644
--- a/tests/urlpatterns/tests.py
+++ b/tests/urlpatterns/tests.py
@@ -130,6 +130,11 @@ class SimplifiedURLTests(SimpleTestCase):
with self.assertRaisesMessage(ImproperlyConfigured, msg):
path('foo/<nonexistent:var>/', empty_view)
+ def test_space_in_route(self):
+ msg = "URL route 'space/<int: num>' cannot contain whitespace."
+ with self.assertRaisesMessage(ImproperlyConfigured, msg):
+ path('space/<int: num>', empty_view)
+
@override_settings(ROOT_URLCONF='urlpatterns.converter_urls')
class ConverterTests(SimpleTestCase):