summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-12-02 23:57:22 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-12-02 23:57:22 +0000
commit67373009e053aca469f857be99158564fc9b42f0 (patch)
treebc27744bb9bca4cb69fecac92f07616034a39941
parenta88ca126fcfe579a38f3e94a7668b626f0e468c3 (diff)
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
-rw-r--r--django/template/context.py7
-rw-r--r--tests/regressiontests/templates/context.py18
-rw-r--r--tests/regressiontests/templates/tests.py2
3 files changed, 25 insertions, 2 deletions
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,
}
#################################