diff options
| author | Tom Christie | 2011-12-29 13:24:52 +0000 |
|---|---|---|
| committer | Tom Christie | 2011-12-29 13:24:52 +0000 |
| commit | 1bdc5eacc6290c486796eb5ab8fa29092137dab6 (patch) | |
| tree | aa1728220a65755d59189b6aa3f898292f673071 /djangorestframework/renderers.py | |
| parent | 500b0dcddc2d965a595eadadc70fb06d2648cc96 (diff) | |
| download | django-rest-framework-1bdc5eacc6290c486796eb5ab8fa29092137dab6.tar.bz2 | |
Add JSONP. Fixes #82
Diffstat (limited to 'djangorestframework/renderers.py')
| -rw-r--r-- | djangorestframework/renderers.py | 24 |
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, |
