diff options
| author | Tom Christie | 2011-05-12 15:11:14 +0100 |
|---|---|---|
| committer | Tom Christie | 2011-05-12 15:11:14 +0100 |
| commit | b5b231a874c7d8d54b1d3849cb95337f15bac9c6 (patch) | |
| tree | f0d891b40038d9ef23a9656163b42f3f95c3332b /djangorestframework/renderers.py | |
| parent | 15f9e7c56699d31043782045a9fe47c354f612cb (diff) | |
| download | django-rest-framework-b5b231a874c7d8d54b1d3849cb95337f15bac9c6.tar.bz2 | |
yet more API cleanup
Diffstat (limited to 'djangorestframework/renderers.py')
| -rw-r--r-- | djangorestframework/renderers.py | 79 |
1 files changed, 42 insertions, 37 deletions
diff --git a/djangorestframework/renderers.py b/djangorestframework/renderers.py index 0aa30f70..e8763f34 100644 --- a/djangorestframework/renderers.py +++ b/djangorestframework/renderers.py @@ -52,7 +52,7 @@ class BaseRenderer(object): should render the output. EG: 'application/json; indent=4' - By default render simply returns the ouput as-is. + By default render simply returns the output as-is. Override this method to provide for other behavior. """ if obj is None: @@ -61,6 +61,41 @@ class BaseRenderer(object): return str(obj) +class JSONRenderer(BaseRenderer): + """ + Renderer which serializes to JSON + """ + media_type = 'application/json' + + def render(self, obj=None, media_type=None): + if obj is None: + return '' + + # If the media type looks like 'application/json; indent=4', then + # pretty print the result. + indent = get_media_type_params(media_type).get('indent', None) + sort_keys = False + try: + indent = max(min(int(indent), 8), 0) + sort_keys = True + except (ValueError, TypeError): + indent = None + + return json.dumps(obj, indent=indent, sort_keys=sort_keys) + + +class XMLRenderer(BaseRenderer): + """ + Renderer which serializes to XML. + """ + media_type = 'application/xml' + + def render(self, obj=None, media_type=None): + if obj is None: + return '' + return dict2xml(obj) + + class TemplateRenderer(BaseRenderer): """ A Base class provided for convenience. @@ -161,8 +196,8 @@ class DocumentingTemplateRenderer(BaseRenderer): Add the fields dynamically.""" super(GenericContentForm, self).__init__() - contenttype_choices = [(media_type, media_type) for media_type in view.parsed_media_types] - initial_contenttype = view.default_parser.media_type + contenttype_choices = [(media_type, media_type) for media_type in view._parsed_media_types] + initial_contenttype = view._default_parser.media_type self.fields[view._CONTENTTYPE_PARAM] = forms.ChoiceField(label='Content Type', choices=contenttype_choices, @@ -204,16 +239,19 @@ class DocumentingTemplateRenderer(BaseRenderer): template = loader.get_template(self.template) context = RequestContext(self.view.request, { 'content': content, - 'resource': self.view, # TODO: rename to view + 'view': self.view, 'request': self.view.request, # TODO: remove 'response': self.view.response, 'description': description, 'name': name, 'markeddown': markeddown, 'breadcrumblist': breadcrumb_list, + 'available_media_types': self.view._rendered_media_types, 'form': form_instance, 'login_url': login_url, 'logout_url': logout_url, + 'ACCEPT_PARAM': self.view._ACCEPT_QUERY_PARAM, + 'METHOD_PARAM': self.view._METHOD_PARAM, 'ADMIN_MEDIA_PREFIX': settings.ADMIN_MEDIA_PREFIX }) @@ -228,39 +266,6 @@ class DocumentingTemplateRenderer(BaseRenderer): return ret -class JSONRenderer(BaseRenderer): - """ - Renderer which serializes to JSON - """ - media_type = 'application/json' - - def render(self, obj=None, media_type=None): - if obj is None: - return '' - - indent = get_media_type_params(media_type).get('indent', None) - if indent is not None: - try: - indent = int(indent) - except ValueError: - indent = None - - sort_keys = indent and True or False - return json.dumps(obj, indent=indent, sort_keys=sort_keys) - - -class XMLRenderer(BaseRenderer): - """ - Renderer which serializes to XML. - """ - media_type = 'application/xml' - - def render(self, obj=None, media_type=None): - if obj is None: - return '' - return dict2xml(obj) - - class DocumentingHTMLRenderer(DocumentingTemplateRenderer): """ Renderer which provides a browsable HTML interface for an API. |
