This commit is contained in:
Hendrik Schneider 2018-02-01 15:31:42 +00:00 committed by GitHub
commit f9add99eb0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 2 deletions

View File

@ -400,7 +400,7 @@ This should be a function with the following signature:
view_name(cls, suffix=None) view_name(cls, suffix=None)
* `cls`: The view class. Typically the name function would inspect the name of the class when generating a descriptive name, by accessing `cls.__name__`. * `cls`: The view class. Typically the name function would inspect the name of the class when generating a descriptive name, by accessing `cls.__name__`. You can set a different name by setting `view_name` variable in your view.
* `suffix`: The optional suffix used when differentiating individual views in a viewset. * `suffix`: The optional suffix used when differentiating individual views in a viewset.
Default: `'rest_framework.views.get_view_name'` Default: `'rest_framework.views.get_view_name'`

View File

@ -28,7 +28,7 @@ def get_view_name(view_cls, suffix=None):
This function is the default for the `VIEW_NAME_FUNCTION` setting. This function is the default for the `VIEW_NAME_FUNCTION` setting.
""" """
name = view_cls.__name__ name = view_cls.view_name if hasattr(view_cls, 'view_name') else view_cls.__name__
name = formatting.remove_trailing_string(name, 'View') name = formatting.remove_trailing_string(name, 'View')
name = formatting.remove_trailing_string(name, 'ViewSet') name = formatting.remove_trailing_string(name, 'ViewSet')
name = formatting.camelcase_to_spaces(name) name = formatting.camelcase_to_spaces(name)

View File

@ -39,6 +39,10 @@ class CustomNameResourceInstance(APIView):
return "Foo" return "Foo"
class CustomNameByVariableResourceInstance(APIView):
view_name = "Bar"
class ResourceViewSet(ModelViewSet): class ResourceViewSet(ModelViewSet):
serializer_class = ModelSerializer serializer_class = ModelSerializer
queryset = BasicModel.objects.all() queryset = BasicModel.objects.all()
@ -50,6 +54,7 @@ urlpatterns = [
url(r'^$', Root.as_view()), url(r'^$', Root.as_view()),
url(r'^resource/$', ResourceRoot.as_view()), url(r'^resource/$', ResourceRoot.as_view()),
url(r'^resource/customname$', CustomNameResourceInstance.as_view()), url(r'^resource/customname$', CustomNameResourceInstance.as_view()),
url(r'^resource/customnamebyvar$', CustomNameByVariableResourceInstance.as_view()),
url(r'^resource/(?P<key>[0-9]+)$', ResourceInstance.as_view()), url(r'^resource/(?P<key>[0-9]+)$', ResourceInstance.as_view()),
url(r'^resource/(?P<key>[0-9]+)/$', NestedResourceRoot.as_view()), url(r'^resource/(?P<key>[0-9]+)/$', NestedResourceRoot.as_view()),
url(r'^resource/(?P<key>[0-9]+)/(?P<other>[A-Za-z]+)$', NestedResourceInstance.as_view()), url(r'^resource/(?P<key>[0-9]+)/(?P<other>[A-Za-z]+)$', NestedResourceInstance.as_view()),
@ -88,6 +93,14 @@ class BreadcrumbTests(TestCase):
('Foo', '/resource/customname') ('Foo', '/resource/customname')
] ]
def test_resource_instance_customnamebyvar_breadcrumbs(self):
url = '/resource/customnamebyvar'
assert get_breadcrumbs(url) == [
('Root', '/'),
('Resource Root', '/resource/'),
('Bar', '/resource/customnamebyvar')
]
def test_nested_resource_breadcrumbs(self): def test_nested_resource_breadcrumbs(self):
url = '/resource/123/' url = '/resource/123/'
assert get_breadcrumbs(url) == [ assert get_breadcrumbs(url) == [