From 9aa5d24f62e15e8b19b41e05e5ba968c674415bd Mon Sep 17 00:00:00 2001 From: Matthew Medal Date: Tue, 13 Dec 2016 17:55:16 -0800 Subject: [PATCH] fix get_breadcrumbs to honor overridden get_view_name and keep viewset suffixes --- rest_framework/utils/breadcrumbs.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/rest_framework/utils/breadcrumbs.py b/rest_framework/utils/breadcrumbs.py index 74f4f7840..5da23a2b2 100644 --- a/rest_framework/utils/breadcrumbs.py +++ b/rest_framework/utils/breadcrumbs.py @@ -9,8 +9,12 @@ 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 + apiview_default_get_view_name = APIView.get_view_name + get_view_name = api_settings.VIEW_NAME_FUNCTION + def breadcrumbs_recursive(url, breadcrumbs_list, prefix, seen): """ Add tuples of (name, url) to the breadcrumbs list, @@ -28,7 +32,13 @@ 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: - name = cls().get_view_name() + # Check if get_view_name has been overridden + # else ensure that view_name suffixes are caught + if cls.get_view_name is not apiview_default_get_view_name: + name = cls().get_view_name() + else: + suffix = getattr(view, 'suffix', None) + name = get_view_name(cls, suffix) insert_url = preserve_builtin_query_params(prefix + url, request) breadcrumbs_list.insert(0, (name, insert_url)) seen.append(view)