diff options
| author | Keryn Knight <keryn@kerynknight.com> | 2022-01-10 13:01:35 +0000 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-01-10 18:39:59 +0100 |
| commit | c8a6bf951b5ad34df852eea6e63a6ad6a0aecd87 (patch) | |
| tree | 982fc393a1bc5eefe4f76deca1bc4178560dc0ef | |
| parent | dfda5ff7226c2719750fc06e633ec7234c23b300 (diff) | |
[4.0.x] Fixed #33426 -- Fixed ResolverMatch.__repr_() for class-based views.
Regression in 7c08f26bf0439c1ed593b51b51ad847f7e262bc1.
Backport of f4b06a3cc1e54888ff86f36a1f9a3ddf21292314 from main
| -rw-r--r-- | django/urls/resolvers.py | 2 | ||||
| -rw-r--r-- | docs/releases/4.0.2.txt | 3 | ||||
| -rw-r--r-- | tests/urlpatterns_reverse/tests.py | 9 |
3 files changed, 14 insertions, 0 deletions
diff --git a/django/urls/resolvers.py b/django/urls/resolvers.py index 110ad87cdb..2ef173c2c8 100644 --- a/django/urls/resolvers.py +++ b/django/urls/resolvers.py @@ -46,6 +46,8 @@ class ResolverMatch: self.namespaces = [x for x in namespaces if x] if namespaces else [] self.namespace = ':'.join(self.namespaces) + if hasattr(func, 'view_class'): + func = func.view_class if not hasattr(func, '__name__'): # A class-based view self._func_path = func.__class__.__module__ + '.' + func.__class__.__name__ diff --git a/docs/releases/4.0.2.txt b/docs/releases/4.0.2.txt index 71bb71e91d..b191ef10e3 100644 --- a/docs/releases/4.0.2.txt +++ b/docs/releases/4.0.2.txt @@ -17,3 +17,6 @@ Bugfixes * Fixed a regression in Django 4.0 that caused displaying an incorrect name for class-based views on the technical 404 debug page (:ticket:`33425`). + +* Fixed a regression in Django 4.0 that caused an incorrect ``repr`` of + ``ResolverMatch`` for class-based views (:ticket:`33426`). diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py index 332bc19e76..5ee4c7a52b 100644 --- a/tests/urlpatterns_reverse/tests.py +++ b/tests/urlpatterns_reverse/tests.py @@ -1148,6 +1148,15 @@ class ResolverMatchTests(SimpleTestCase): "namespaces=[], route='^no_kwargs/([0-9]+)/([0-9]+)/$')", ) + @override_settings(ROOT_URLCONF='urlpatterns_reverse.reverse_lazy_urls') + def test_classbased_repr(self): + self.assertEqual( + repr(resolve('/redirect/')), + "ResolverMatch(func=urlpatterns_reverse.views.LazyRedirectView, " + "args=(), kwargs={}, url_name=None, app_names=[], " + "namespaces=[], route='redirect/')", + ) + @override_settings(ROOT_URLCONF='urlpatterns_reverse.urls') def test_repr_functools_partial(self): tests = [ |
