From 67373009e053aca469f857be99158564fc9b42f0 Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Sun, 2 Dec 2007 23:57:22 +0000 Subject: [PATCH] Fixed #4563 -- Context.pop/push/update return the top-level dictionary (the new one for push() and update(), the one removed for pop()). Based on a patch from Brian Harring. git-svn-id: http://code.djangoproject.com/svn/django/trunk@6854 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/template/context.py | 7 +++++-- tests/regressiontests/templates/context.py | 18 ++++++++++++++++++ tests/regressiontests/templates/tests.py | 2 ++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 tests/regressiontests/templates/context.py diff --git a/django/template/context.py b/django/template/context.py index 017d2d84b1..0e41a26618 100644 --- a/django/template/context.py +++ b/django/template/context.py @@ -23,12 +23,14 @@ class Context(object): yield d def push(self): - self.dicts = [{}] + self.dicts + d = {} + self.dicts = [d] + self.dicts + return d def pop(self): if len(self.dicts) == 1: raise ContextPopException - del self.dicts[0] + return self.dicts.pop(0) def __setitem__(self, key, value): "Set a variable in the current context" @@ -62,6 +64,7 @@ class Context(object): def update(self, other_dict): "Like dict.update(). Pushes an entire dictionary's keys and values onto the context." self.dicts = [other_dict] + self.dicts + return other_dict # 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/regressiontests/templates/context.py b/tests/regressiontests/templates/context.py new file mode 100644 index 0000000000..d8b0f39abe --- /dev/null +++ b/tests/regressiontests/templates/context.py @@ -0,0 +1,18 @@ +# coding: utf-8 + +context_tests = r""" +>>> from django.template import Context +>>> c = Context({'a': 1, 'b': 'xyzzy'}) +>>> c['a'] +1 +>>> c.push() +{} +>>> c['a'] = 2 +>>> c['a'] +2 +>>> c.pop() +{'a': 2} +>>> c['a'] +1 +""" + diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index cbbd88b06c..846023afc9 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -18,11 +18,13 @@ from django.utils.safestring import mark_safe from django.utils.tzinfo import LocalTimezone from unicode import unicode_tests +from context import context_tests import filters # Some other tests we would like to run __test__ = { 'unicode': unicode_tests, + 'context': context_tests, } #################################