From 5c1d6a9200091506dbacd8f13881486991e7140e Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Thu, 30 Jul 2015 14:07:51 +0100 Subject: [PATCH] Docs for AdminRenderer --- docs/api-guide/renderers.md | 52 +++++++++++++----- docs/img/admin.png | Bin 0 -> 55904 bytes rest_framework/renderers.py | 1 + rest_framework/templatetags/rest_framework.py | 4 +- 4 files changed, 40 insertions(+), 17 deletions(-) create mode 100644 docs/img/admin.png diff --git a/docs/api-guide/renderers.md b/docs/api-guide/renderers.md index 1d1b4691e..614259458 100644 --- a/docs/api-guide/renderers.md +++ b/docs/api-guide/renderers.md @@ -153,23 +153,13 @@ You can use `StaticHTMLRenderer` either to return regular HTML pages using REST See also: `TemplateHTMLRenderer` -## HTMLFormRenderer - -Renders data returned by a serializer into an HTML form. The output of this renderer does not include the enclosing `
` tags or an submit actions, as you'll probably need those to include the desired method and URL. Also note that the `HTMLFormRenderer` does not yet support including field error messages. - -**Note**: The `HTMLFormRenderer` class is intended for internal use with the browsable API. It should not be considered a fully documented or stable API. The template used by the `HTMLFormRenderer` class, and the context submitted to it **may be subject to change**. If you need to use this renderer class it is advised that you either make a local copy of the class and templates, or follow the release note on REST framework upgrades closely. - -**.media_type**: `text/html` - -**.format**: `'.form'` - -**.charset**: `utf-8` - -**.template**: `'rest_framework/form.html'` - ## BrowsableAPIRenderer -Renders data into HTML for the Browsable API. This renderer will determine which other renderer would have been given highest priority, and use that to display an API style response within the HTML page. +Renders data into HTML for the Browsable API: + +![The BrowsableAPIRenderer](../img/quickstart.png) + +This renderer will determine which other renderer would have been given highest priority, and use that to display an API style response within the HTML page. **.media_type**: `text/html` @@ -187,6 +177,38 @@ By default the response content will be rendered with the highest priority rende def get_default_renderer(self, view): return JSONRenderer() +## AdminRenderer + +Renders data into HTML for an admin-like display: + +![The AdminRender view](../img/admin.png) + +This renderer is suitable for CRUD-style web APIs that should also present a user-friendly interface for managing the data. + +Note that views that have nested or list serializers for their input won't work well with the `AdminRenderer`, as the HTML forms are unable to properly support them. + +**.media_type**: `text/html` + +**.format**: `'.admin'` + +**.charset**: `utf-8` + +**.template**: `'rest_framework/admin.html'` + +## HTMLFormRenderer + +Renders data returned by a serializer into an HTML form. The output of this renderer does not include the enclosing `` tags or an submit actions, as you'll probably need those to include the desired method and URL. Also note that the `HTMLFormRenderer` does not yet support including field error messages. + +**Note**: The `HTMLFormRenderer` class is intended for internal use with the browsable API and admin interface. It should not be considered a fully documented or stable API. The template used by the `HTMLFormRenderer` class, and the context submitted to it **may be subject to change**. If you need to use this renderer class it is advised that you either make a local copy of the class and templates, or follow the release note on REST framework upgrades closely. + +**.media_type**: `text/html` + +**.format**: `'.form'` + +**.charset**: `utf-8` + +**.template**: `'rest_framework/form.html'` + ## MultiPartRenderer This renderer is used for rendering HTML multipart form data. **It is not suitable as a response renderer**, but is instead used for creating test requests, using REST framework's [test client and test request factory][testing]. diff --git a/docs/img/admin.png b/docs/img/admin.png new file mode 100644 index 0000000000000000000000000000000000000000..f12df099dfdaba6ca8214694b6ae9c8f88fd9df4 GIT binary patch literal 55904 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 Mg`@<___cig7ZH~p!vFvP literal 0 HcmV?d00001 diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index d45351fdd..93fa55640 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -705,6 +705,7 @@ class AdminRenderer(BrowsableAPIRenderer): # Creation and deletion should use redirects in the admin style. if (response.status_code == status.HTTP_201_CREATED) and ('Location' in response): response.status_code = status.HTTP_302_FOUND + response['Location'] = request.build_absolute_uri() ret = '' if response.status_code == status.HTTP_204_NO_CONTENT: diff --git a/rest_framework/templatetags/rest_framework.py b/rest_framework/templatetags/rest_framework.py index b553ea6f9..1376f6d46 100644 --- a/rest_framework/templatetags/rest_framework.py +++ b/rest_framework/templatetags/rest_framework.py @@ -112,8 +112,8 @@ def add_class(value, css_class): def format_value(value): if getattr(value, 'is_hyperlink', False): return mark_safe('%s' % (value, escape(value.name))) - if isinstance(value, (int, float, decimal.Decimal, bool, type(None))): - return mark_safe('%s' % escape(value)) + if value in (True, False, None): + return mark_safe('%s' % {True: 'true', False: 'false', None: 'null'}[value]) elif isinstance(value, list): if any([isinstance(item, (list, dict)) for item in value]): template = loader.get_template('rest_framework/admin/list_value.html')