From 3d0292e1cdcf56c490c7ee4777724620e76cad11 Mon Sep 17 00:00:00 2001 From: Ollie Walsh Date: Fri, 14 Aug 2015 12:16:57 +0100 Subject: [PATCH 1/2] Do not ignore overridden View.get_view_name() in breadcrumbs --- rest_framework/utils/breadcrumbs.py | 3 +-- tests/test_utils.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/rest_framework/utils/breadcrumbs.py b/rest_framework/utils/breadcrumbs.py index 950e9695b..5d8a18cf2 100644 --- a/rest_framework/utils/breadcrumbs.py +++ b/rest_framework/utils/breadcrumbs.py @@ -32,8 +32,7 @@ def get_breadcrumbs(url, request=None): # Don't list the same view twice in a row. # Probably an optional trailing slash. if not seen or seen[-1] != view: - suffix = getattr(view, 'suffix', None) - name = view_name_func(cls, suffix) + name = cls().get_view_name() insert_url = preserve_builtin_query_params(prefix + url, request) breadcrumbs_list.insert(0, (name, insert_url)) seen.append(view) diff --git a/tests/test_utils.py b/tests/test_utils.py index 062f78e11..5e2823b96 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -31,10 +31,15 @@ class NestedResourceRoot(APIView): class NestedResourceInstance(APIView): pass +class CustomNameResourceInstance(APIView): + def get_view_name(self): + return "Foo" + urlpatterns = [ url(r'^$', Root.as_view()), url(r'^resource/$', ResourceRoot.as_view()), + url(r'^resource/customname$', CustomNameResourceInstance.as_view()), url(r'^resource/(?P[0-9]+)$', ResourceInstance.as_view()), url(r'^resource/(?P[0-9]+)/$', NestedResourceRoot.as_view()), url(r'^resource/(?P[0-9]+)/(?P[A-Za-z]+)$', NestedResourceInstance.as_view()), @@ -75,6 +80,17 @@ class BreadcrumbTests(TestCase): ] ) + def test_resource_instance_customname_breadcrumbs(self): + url = '/resource/customname' + self.assertEqual( + get_breadcrumbs(url), + [ + ('Root', '/'), + ('Resource Root', '/resource/'), + ('Foo', '/resource/customname') + ] + ) + def test_nested_resource_breadcrumbs(self): url = '/resource/123/' self.assertEqual( From 332c30afb9f710653843c6d6746be613a9fd638d Mon Sep 17 00:00:00 2001 From: Ollie Walsh Date: Fri, 14 Aug 2015 12:20:25 +0100 Subject: [PATCH 2/2] Lint --- rest_framework/utils/breadcrumbs.py | 3 --- tests/test_utils.py | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/rest_framework/utils/breadcrumbs.py b/rest_framework/utils/breadcrumbs.py index 5d8a18cf2..8f68d9300 100644 --- a/rest_framework/utils/breadcrumbs.py +++ b/rest_framework/utils/breadcrumbs.py @@ -9,11 +9,8 @@ def get_breadcrumbs(url, request=None): tuple of (name, url). """ from rest_framework.reverse import preserve_builtin_query_params - from rest_framework.settings import api_settings from rest_framework.views import APIView - view_name_func = api_settings.VIEW_NAME_FUNCTION - def breadcrumbs_recursive(url, breadcrumbs_list, prefix, seen): """ Add tuples of (name, url) to the breadcrumbs list, diff --git a/tests/test_utils.py b/tests/test_utils.py index 5e2823b96..781aedb84 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -31,6 +31,7 @@ class NestedResourceRoot(APIView): class NestedResourceInstance(APIView): pass + class CustomNameResourceInstance(APIView): def get_view_name(self): return "Foo" @@ -89,7 +90,7 @@ class BreadcrumbTests(TestCase): ('Resource Root', '/resource/'), ('Foo', '/resource/customname') ] - ) + ) def test_nested_resource_breadcrumbs(self): url = '/resource/123/'