summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/urls/resolvers.py2
-rw-r--r--docs/releases/4.0.2.txt3
-rw-r--r--tests/urlpatterns_reverse/tests.py9
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 = [