From 832ab0dbaacf381d15445259f292d88175ff84f2 Mon Sep 17 00:00:00 2001 From: Alex Hill Date: Thu, 19 Dec 2013 13:42:32 +0800 Subject: [PATCH] Fixed #21639 -- Implemented RenderContext.__getitem__ It's now consistent with RenderContext.get. --- django/template/context.py | 7 +++---- tests/template_tests/test_context.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/django/template/context.py b/django/template/context.py index ba2c3d4d07..7a5ad161d4 100644 --- a/django/template/context.py +++ b/django/template/context.py @@ -145,11 +145,10 @@ class RenderContext(BaseContext): return key in self.dicts[-1] def get(self, key, otherwise=None): - d = self.dicts[-1] - if key in d: - return d[key] - return otherwise + return self.dicts[-1].get(key, otherwise) + def __getitem__(self, key): + return self.dicts[-1][key] # This is a function rather than module-level procedural code because we only # want it to execute if somebody uses RequestContext. diff --git a/tests/template_tests/test_context.py b/tests/template_tests/test_context.py index 7bcfb7f9f2..bbf6918103 100644 --- a/tests/template_tests/test_context.py +++ b/tests/template_tests/test_context.py @@ -3,6 +3,7 @@ from unittest import TestCase from django.template import Context, Variable, VariableDoesNotExist +from django.template.context import RenderContext class ContextTests(TestCase): @@ -34,3 +35,17 @@ class ContextTests(TestCase): self.assertRaises(VariableDoesNotExist, Variable('new').resolve, empty_context) self.assertEqual(Variable('new').resolve(Context({'new': 'foo'})), 'foo') + + def test_render_context(self): + test_context = RenderContext({'fruit': 'papaya'}) + + # Test that push() limits access to the topmost dict + test_context.push() + + test_context['vegetable'] = 'artichoke' + self.assertEqual(list(test_context), ['vegetable']) + + self.assertNotIn('fruit', test_context) + with self.assertRaises(KeyError): + test_context['fruit'] + self.assertIsNone(test_context.get('fruit'))