diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 14a371852..fe5f92f7c 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -88,8 +88,12 @@ class JSONRenderer(BaseRenderer): """ Render `data` into JSON, returning a bytestring. """ - if data is None: - return bytes() + response = None + if renderer_context: + response = renderer_context.get('response', None) + + if response is not None and response.status_code == 204: + return b'' renderer_context = renderer_context or {} indent = self.get_indent(accepted_media_type, renderer_context) diff --git a/tests/test_renderers.py b/tests/test_renderers.py index 667631f29..014b38754 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -313,6 +313,17 @@ class JSONRendererTests(TestCase): data = json.loads(ret.decode('utf-8')) self.assertEqual(data, [[o.id, o.name]]) + def test_render_valid_json_when_data_is_none(self): + result = JSONRenderer().render(None) + self.assertEqual(result, b'null') + + def test_render_no_content_on_204_response(self): + context = { + 'response': Response(status=204), + } + result = JSONRenderer().render(None, renderer_context=context) + self.assertEqual(result, b'') + def test_render_dict_abc_obj(self): class Dict(MutableMapping): def __init__(self):