diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 406dda72c..b899f66c5 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -53,6 +53,9 @@ class BaseRenderer(object): raise NotImplementedError('Renderer class requires .render() to be implemented') +_NULL_JSON = bytes('null'.encode('ascii')) + + class JSONRenderer(BaseRenderer): """ Renderer which serializes to JSON. @@ -89,7 +92,7 @@ class JSONRenderer(BaseRenderer): Render `data` into JSON, returning a bytestring. """ if data is None: - return bytes() + return _NULL_JSON renderer_context = renderer_context or {} indent = self.get_indent(accepted_media_type, renderer_context) diff --git a/rest_framework/response.py b/rest_framework/response.py index cb0f290ce..204660f5a 100644 --- a/rest_framework/response.py +++ b/rest_framework/response.py @@ -77,10 +77,11 @@ class Response(SimpleTemplateResponse): ) return bytes(ret.encode(charset)) - if not ret: + if self.status_code == 204: del self['Content-Type'] - - return ret + return bytes() + else: + return ret @property def status_text(self): diff --git a/tests/test_renderers.py b/tests/test_renderers.py index 09cef435e..10d59b4b2 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -376,6 +376,10 @@ class JSONRendererTests(TestCase): content = renderer.render(obj, 'application/json; indent=2') self.assertEqual(strip_trailing_whitespace(content.decode('utf-8')), _indented_repr) + def test_none(self): + ret = JSONRenderer().render(None) + self.assertEqual(None, json.loads(ret)) + class UnicodeJSONRendererTests(TestCase): """