From 3c60b4b7b6a85eac9f8bd2ebf4f1a3098be04ee2 Mon Sep 17 00:00:00 2001 From: Ryan P Kilby Date: Sat, 18 Nov 2017 00:12:09 -0500 Subject: [PATCH] Add 'extra actions' to ViewSet & browsable APIs --- rest_framework/renderers.py | 7 +++ .../templates/rest_framework/admin.html | 14 ++++++ .../templates/rest_framework/base.html | 14 ++++++ rest_framework/viewsets.py | 30 +++++++++++ tests/test_renderers.py | 24 ++++++++- tests/test_viewsets.py | 50 +++++++++++++++++-- 6 files changed, 133 insertions(+), 6 deletions(-) diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 14a371852..ca4844321 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -612,6 +612,11 @@ class BrowsableAPIRenderer(BaseRenderer): def get_breadcrumbs(self, request): return get_breadcrumbs(request.path, request) + def get_extra_actions(self, view): + if hasattr(view, 'get_extra_action_url_map'): + return view.get_extra_action_url_map() + return None + def get_filter_form(self, data, view, request): if not hasattr(view, 'get_queryset') or not hasattr(view, 'filter_backends'): return @@ -698,6 +703,8 @@ class BrowsableAPIRenderer(BaseRenderer): 'delete_form': self.get_rendered_html_form(data, view, 'DELETE', request), 'options_form': self.get_rendered_html_form(data, view, 'OPTIONS', request), + 'extra_actions': self.get_extra_actions(view), + 'filter_form': self.get_filter_form(data, view, request), 'raw_data_put_form': raw_data_put_form, diff --git a/rest_framework/templates/rest_framework/admin.html b/rest_framework/templates/rest_framework/admin.html index 4fb6480c5..faa37a586 100644 --- a/rest_framework/templates/rest_framework/admin.html +++ b/rest_framework/templates/rest_framework/admin.html @@ -110,6 +110,20 @@ {% endif %} + {% if extra_actions %} + + {% endif %} + {% if filter_form %} + + + {% endif %} + {% if filter_form %}