Fixed #24493 -- Added BaseContext.setdefault()

This commit is contained in:
Preston Timmons 2015-03-11 11:00:17 -05:00 committed by Tim Graham
parent 4d9414098b
commit 388e79e9fc
4 changed files with 28 additions and 0 deletions

View File

@ -89,6 +89,13 @@ class BaseContext(object):
return d[key]
return otherwise
def setdefault(self, key, default=None):
try:
return self[key]
except KeyError:
self[key] = default
return default
def new(self, values=None):
"""
Returns a new context with the same properties, but with only the

View File

@ -420,6 +420,13 @@ dictionary syntax::
Returns the value for ``key`` if ``key`` is in the context, else returns
``otherwise``.
.. method:: Context.setdefault(key, default=None)
.. versionadded:: 1.9
If ``key`` is in the context, returns its value. Otherwise inserts ``key``
with a value of ``default`` and returns ``default``.
.. method:: Context.pop()
.. method:: Context.push()
.. exception:: ContextPopException

View File

@ -166,6 +166,9 @@ Templates
helper can now store results in a template variable by using the ``as``
argument.
* Added a :meth:`Context.setdefault() <django.template.Context.setdefault>`
method.
Requests and Responses
^^^^^^^^^^^^^^^^^^^^^^

View File

@ -30,6 +30,17 @@ class ContextTests(SimpleTestCase):
self.assertEqual(c['a'], 3)
self.assertEqual(c['a'], 1)
def test_setdefault(self):
c = Context()
x = c.setdefault('x', 42)
self.assertEqual(x, 42)
self.assertEqual(c['x'], 42)
x = c.setdefault('x', 100)
self.assertEqual(x, 42)
self.assertEqual(c['x'], 42)
def test_resolve_on_context_method(self):
"""
#17778 -- Variable shouldn't resolve RequestContext methods