diff options
| author | Tai Lee | 2013-09-13 22:51:11 +1000 | 
|---|---|---|
| committer | Tai Lee | 2013-09-13 23:11:44 +1000 | 
| commit | bb3261ca489104e3dea434aa11d76f370e938ca8 (patch) | |
| tree | 2bfa86865bfad8f25a647eccaa61c6df044a60e2 /rest_framework/renderers.py | |
| parent | 068e4a18f490cff77364ecddd47a614ba3167013 (diff) | |
| download | django-rest-framework-bb3261ca489104e3dea434aa11d76f370e938ca8.tar.bz2 | |
Fixed #1105 -- Add hook for custom context in `BrowsableAPIRenderer`.
Replace hard coded response status check with `allow_form` context
variable, so that it can be overridden in a custom renderer class.
Diffstat (limited to 'rest_framework/renderers.py')
| -rw-r--r-- | rest_framework/renderers.py | 47 | 
1 files changed, 22 insertions, 25 deletions
| diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index fca67eee..6597123f 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -564,9 +564,9 @@ class BrowsableAPIRenderer(BaseRenderer):      def get_breadcrumbs(self, request):          return get_breadcrumbs(request.path) -    def render(self, data, accepted_media_type=None, renderer_context=None): +    def get_context(self, data, accepted_media_type, renderer_context):          """ -        Render the HTML for the browsable API representation. +        Returns the context used to render.          """          self.accepted_media_type = accepted_media_type or ''          self.renderer_context = renderer_context or {} @@ -576,55 +576,52 @@ class BrowsableAPIRenderer(BaseRenderer):          response = renderer_context['response']          renderer = self.get_default_renderer(view) -        content = self.get_content(renderer, data, accepted_media_type, renderer_context) - -        put_form = self.get_rendered_html_form(view, 'PUT', request) -        post_form = self.get_rendered_html_form(view, 'POST', request) -        patch_form = self.get_rendered_html_form(view, 'PATCH', request) -        delete_form = self.get_rendered_html_form(view, 'DELETE', request) -        options_form = self.get_rendered_html_form(view, 'OPTIONS', request)          raw_data_put_form = self.get_raw_data_form(view, 'PUT', request) -        raw_data_post_form = self.get_raw_data_form(view, 'POST', request)          raw_data_patch_form = self.get_raw_data_form(view, 'PATCH', request)          raw_data_put_or_patch_form = raw_data_put_form or raw_data_patch_form -        name = self.get_name(view) -        description = self.get_description(view) -        breadcrumb_list = self.get_breadcrumbs(request) - -        template = loader.get_template(self.template)          context = RequestContext(request, { -            'content': content, +            'content': self.get_content(renderer, data, accepted_media_type, renderer_context),              'view': view,              'request': request,              'response': response, -            'description': description, -            'name': name, +            'description': self.get_description(view), +            'name': self.get_name(view),              'version': VERSION, -            'breadcrumblist': breadcrumb_list, +            'breadcrumblist': self.get_breadcrumbs(request),              'allowed_methods': view.allowed_methods,              'available_formats': [renderer.format for renderer in view.renderer_classes], -            'put_form': put_form, -            'post_form': post_form, -            'patch_form': patch_form, -            'delete_form': delete_form, -            'options_form': options_form, +            'put_form': self.get_rendered_html_form(view, 'PUT', request), +            'post_form': self.get_rendered_html_form(view, 'POST', request), +            'patch_form': self.get_rendered_html_form(view, 'PATCH', request), +            'delete_form': self.get_rendered_html_form(view, 'DELETE', request), +            'options_form': self.get_rendered_html_form(view, 'OPTIONS', request),              'raw_data_put_form': raw_data_put_form, -            'raw_data_post_form': raw_data_post_form, +            'raw_data_post_form': self.get_raw_data_form(view, 'POST', request),              'raw_data_patch_form': raw_data_patch_form,              'raw_data_put_or_patch_form': raw_data_put_or_patch_form, +            'allow_form': bool(response.status_code != 403), +              'api_settings': api_settings          }) +        return context +    def render(self, data, accepted_media_type=None, renderer_context=None): +        """ +        Render the HTML for the browsable API representation. +        """ +        template = loader.get_template(self.template) +        context = self.get_context(data, accepted_media_type, renderer_context)          ret = template.render(context)          # Munge DELETE Response code to allow us to return content          # (Do this *after* we've rendered the template so that we include          # the normal deletion response code in the output) +        response = renderer_context['response']          if response.status_code == status.HTTP_204_NO_CONTENT:              response.status_code = status.HTTP_200_OK | 
