diff --git a/rest_framework/templates/rest_framework/admin/detail.html b/rest_framework/templates/rest_framework/admin/detail.html index 759fa163d..42cd1a36d 100644 --- a/rest_framework/templates/rest_framework/admin/detail.html +++ b/rest_framework/templates/rest_framework/admin/detail.html @@ -1,7 +1,7 @@ {% load rest_framework %} - {% for key, value in results.items %} + {% for key, value in results|items %} {% if key in details %} {% endif %} diff --git a/rest_framework/templates/rest_framework/admin/dict_value.html b/rest_framework/templates/rest_framework/admin/dict_value.html index 955dcdbdf..ef47b7228 100644 --- a/rest_framework/templates/rest_framework/admin/dict_value.html +++ b/rest_framework/templates/rest_framework/admin/dict_value.html @@ -1,7 +1,7 @@ {% load rest_framework %}
{{ key|capfirst }}{{ value|format_value }}
- {% for k, v in value %} + {% for k, v in value|items %} diff --git a/rest_framework/templates/rest_framework/admin/list.html b/rest_framework/templates/rest_framework/admin/list.html index 6044ebb38..fd394d44e 100644 --- a/rest_framework/templates/rest_framework/admin/list.html +++ b/rest_framework/templates/rest_framework/admin/list.html @@ -6,7 +6,7 @@ {% for row in results %} - {% for key, value in row.items %} + {% for key, value in row|items %} {% if key in columns %} ', str(response.content)) - def test_render_dict_with_items_key(self): factory = APIRequestFactory() @@ -671,7 +670,7 @@ class AdminRendererTests(TestCase): renderer_classes = (AdminRenderer, ) def get(self, request): - return Response({'items' : 'a string'}) + return Response({'items': 'a string'}) view = DummyView.as_view() request = factory.get('/') @@ -679,7 +678,6 @@ class AdminRendererTests(TestCase): response.render() self.assertInHTML('', str(response.content)) - def test_render_dict_with_iteritems_key(self): factory = APIRequestFactory() @@ -687,7 +685,7 @@ class AdminRendererTests(TestCase): renderer_classes = (AdminRenderer, ) def get(self, request): - return Response({'iteritems' : 'a string'}) + return Response({'iteritems': 'a string'}) view = DummyView.as_view() request = factory.get('/')
{{ k|format_value }} {{ v|format_value }}
{{ value|format_value }} diff --git a/rest_framework/templatetags/rest_framework.py b/rest_framework/templatetags/rest_framework.py index 62f66de5f..decf9cdae 100644 --- a/rest_framework/templatetags/rest_framework.py +++ b/rest_framework/templatetags/rest_framework.py @@ -148,7 +148,7 @@ def format_value(value): return template_render(template, context) elif isinstance(value, dict): template = loader.get_template('rest_framework/admin/dict_value.html') - context = {'value': value.items()} + context = {'value': value} return template_render(template, context) elif isinstance(value, six.string_types): if ( @@ -163,6 +163,12 @@ def format_value(value): return six.text_type(value) +@register.filter +def items(value): + if hasattr(value, 'items'): + return value.items() + + @register.filter def add_nested_class(value): if isinstance(value, dict): diff --git a/tests/test_renderers.py b/tests/test_renderers.py index 02b95d31f..12ac2dfc8 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -656,14 +656,13 @@ class AdminRendererTests(TestCase): renderer_classes = (AdminRenderer, ) def get(self, request): - return Response({'foo' : 'a string'}) + return Response({'foo': 'a string'}) view = DummyView.as_view() request = factory.get('/') response = view(request) response.render() self.assertInHTML('
Fooa string
Itemsa string