From 67373009e053aca469f857be99158564fc9b42f0 Mon Sep 17 00:00:00 2001
From: Malcolm Tredinnick <malcolm.tredinnick@gmail.com>
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,
 }
 
 #################################