mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-29 13:04:03 +03:00
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.
This commit is contained in:
parent
068e4a18f4
commit
bb3261ca48
|
@ -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
|
||||
|
||||
|
|
|
@ -122,7 +122,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{% if response.status_code != 403 %}
|
||||
{% if allow_form %}
|
||||
|
||||
{% if post_form or raw_data_post_form %}
|
||||
<div {% if post_form %}class="tabbable"{% endif %}>
|
||||
|
|
Loading…
Reference in New Issue
Block a user