diff options
| author | mendespedro <pedro.mendes@solyd.com.br> | 2021-12-10 19:23:54 -0300 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-12-13 08:09:28 +0100 |
| commit | 75485d16a289c1fc4eb39702c14d2f08f0d8ccce (patch) | |
| tree | 64707ba124eee28936199d93270d449e62bab19b | |
| parent | 7e4a9a9f696574a18f5c98f34d5a88e254b2d394 (diff) | |
Fixed #33351 -- Made path()/re_path() raise TypeError when kwargs argument is not a dict.
| -rw-r--r-- | django/urls/conf.py | 4 | ||||
| -rw-r--r-- | tests/urlpatterns/tests.py | 11 |
2 files changed, 14 insertions, 1 deletions
diff --git a/django/urls/conf.py b/django/urls/conf.py index b3937d5512..40990d10f5 100644 --- a/django/urls/conf.py +++ b/django/urls/conf.py @@ -57,6 +57,10 @@ def include(arg, namespace=None): def _path(route, view, kwargs=None, name=None, Pattern=None): from django.views import View + if kwargs is not None and not isinstance(kwargs, dict): + raise TypeError( + f'kwargs argument must be a dict, but got {kwargs.__class__.__name__}.' + ) if isinstance(view, (list, tuple)): # For include(...) processing. pattern = Pattern(route, is_endpoint=False) diff --git a/tests/urlpatterns/tests.py b/tests/urlpatterns/tests.py index cf942fe72b..262cb2e11e 100644 --- a/tests/urlpatterns/tests.py +++ b/tests/urlpatterns/tests.py @@ -4,7 +4,9 @@ import uuid from django.core.exceptions import ImproperlyConfigured from django.test import SimpleTestCase from django.test.utils import override_settings -from django.urls import NoReverseMatch, Resolver404, path, resolve, reverse +from django.urls import ( + NoReverseMatch, Resolver404, path, re_path, resolve, reverse, +) from django.views import View from .converters import DynamicConverter @@ -137,6 +139,13 @@ class SimplifiedURLTests(SimpleTestCase): url = reverse('inner-extra', kwargs={'extra': 'something'}) self.assertEqual(url, '/included_urls/extra/something/') + def test_invalid_kwargs(self): + msg = 'kwargs argument must be a dict, but got str.' + with self.assertRaisesMessage(TypeError, msg): + path('hello/', empty_view, 'name') + with self.assertRaisesMessage(TypeError, msg): + re_path('^hello/$', empty_view, 'name') + def test_invalid_converter(self): msg = "URL route 'foo/<nonexistent:var>/' uses invalid converter 'nonexistent'." with self.assertRaisesMessage(ImproperlyConfigured, msg): |
