diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 97984daf9..7a26b4409 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -51,6 +51,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. @@ -87,7 +90,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 a2620e93c..7b2081a1d 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -360,6 +360,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): """