From 714607307ed0a5141779b9758d3cd33ac698021f Mon Sep 17 00:00:00 2001 From: Mikalay Radchuk Date: Tue, 26 Jan 2016 20:58:01 +0300 Subject: [PATCH] Fixes AttributeError in HTMLFormRenderer.render If `HTMLFormRenderer.render` will be called with default arguments, `AttributeError: 'NoneType' object has no attribute 'get'` will be raised. --- rest_framework/renderers.py | 1 + tests/test_renderers.py | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index fa64f88ed..06bc3086f 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -341,6 +341,7 @@ class HTMLFormRenderer(BaseRenderer): """ Render serializer data and return an HTML form, as a string. """ + renderer_context = renderer_context or {} form = data.serializer style = renderer_context.get('style', {}) diff --git a/tests/test_renderers.py b/tests/test_renderers.py index b4b2db22e..de89e50aa 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -10,6 +10,7 @@ from django.core.cache import cache from django.db import models from django.test import TestCase from django.utils import six +from django.utils.safestring import SafeText from django.utils.translation import ugettext_lazy as _ from rest_framework import permissions, serializers, status @@ -459,3 +460,28 @@ class TestHiddenFieldHTMLFormRenderer(TestCase): field = serializer['published'] rendered = renderer.render_field(field, {}) assert rendered == '' + + +class TestHTMLFormRenderer(TestCase): + def setUp(self): + class TestSerializer(serializers.Serializer): + test_field = serializers.CharField() + + self.renderer = HTMLFormRenderer() + self.serializer = TestSerializer(data={}) + + def test_render_with_default_args(self): + self.serializer.is_valid() + renderer = HTMLFormRenderer() + + result = renderer.render(self.serializer.data) + + self.assertIsInstance(result, SafeText) + + def test_render_with_provided_args(self): + self.serializer.is_valid() + renderer = HTMLFormRenderer() + + result = renderer.render(self.serializer.data, None, {}) + + self.assertIsInstance(result, SafeText)