aboutsummaryrefslogtreecommitdiffstats
path: root/djangorestframework/renderers.py
diff options
context:
space:
mode:
authorTom Christie2011-12-29 13:24:52 +0000
committerTom Christie2011-12-29 13:24:52 +0000
commit1bdc5eacc6290c486796eb5ab8fa29092137dab6 (patch)
treeaa1728220a65755d59189b6aa3f898292f673071 /djangorestframework/renderers.py
parent500b0dcddc2d965a595eadadc70fb06d2648cc96 (diff)
downloaddjango-rest-framework-1bdc5eacc6290c486796eb5ab8fa29092137dab6.tar.bz2
Add JSONP. Fixes #82
Diffstat (limited to 'djangorestframework/renderers.py')
-rw-r--r--djangorestframework/renderers.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/djangorestframework/renderers.py b/djangorestframework/renderers.py
index 3f951ba1..2affd7f2 100644
--- a/djangorestframework/renderers.py
+++ b/djangorestframework/renderers.py
@@ -26,6 +26,7 @@ __all__ = (
'BaseRenderer',
'TemplateRenderer',
'JSONRenderer',
+ 'JSONPRenderer',
'DocumentingHTMLRenderer',
'DocumentingXHTMLRenderer',
'DocumentingPlainTextRenderer',
@@ -113,6 +114,28 @@ class JSONRenderer(BaseRenderer):
return json.dumps(obj, cls=DateTimeAwareJSONEncoder, indent=indent, sort_keys=sort_keys)
+class JSONPRenderer(JSONRenderer):
+ """
+ Renderer which serializes to JSONP
+ """
+
+ media_type = 'application/json-p'
+ format = 'json-p'
+ renderer_class = JSONRenderer
+ callback_parameter = 'callback'
+
+ def _get_callback(self):
+ return self.view.request.GET.get(self.callback_parameter, self.callback_parameter)
+
+ def _get_renderer(self):
+ return self.renderer_class(self.view)
+
+ def render(self, obj=None, media_type=None):
+ callback = self._get_callback()
+ json = self._get_renderer().render(obj, media_type)
+ return "%s(%s);" % (callback, json)
+
+
class XMLRenderer(BaseRenderer):
"""
Renderer which serializes to XML.
@@ -376,6 +399,7 @@ class DocumentingPlainTextRenderer(DocumentingTemplateRenderer):
DEFAULT_RENDERERS = ( JSONRenderer,
+ JSONPRenderer,
DocumentingHTMLRenderer,
DocumentingXHTMLRenderer,
DocumentingPlainTextRenderer,