diff options
| author | Baptiste Mispelon <bmispelon@gmail.com> | 2014-02-15 22:58:03 +0100 |
|---|---|---|
| committer | Baptiste Mispelon <bmispelon@gmail.com> | 2014-02-15 22:58:03 +0100 |
| commit | 9db4271bd11ac23a5a5652bbcdf8fb6d4b997651 (patch) | |
| tree | 07f0d797b0c9f34726c0ec1de68f4179d899cedc | |
| parent | f46ef750b9d08ef6081ab57428201028d77adb53 (diff) | |
Fixed bad comparison logic introduced in d97bf2e9c8971764690caaf81a0914bc368d6b02.
Refs #21765.
Thanks to kezabelle for the quick report and to onjin
for providing the patch.
| -rw-r--r-- | django/template/context.py | 10 | ||||
| -rw-r--r-- | tests/template_tests/test_context.py | 20 |
2 files changed, 28 insertions, 2 deletions
diff --git a/django/template/context.py b/django/template/context.py index 9982b85f6d..b2f00abd31 100644 --- a/django/template/context.py +++ b/django/template/context.py @@ -102,7 +102,15 @@ class BaseContext(object): Compares two contexts by comparing theirs 'dicts' attributes. """ if isinstance(other, BaseContext): - return self.dicts[-1] == other.dicts[-1] + # because dictionaries can be put in different order + # we have to flatten them like in templates + def flatten(dicts): + flat = {} + for d in dicts: + flat.update(d) + return flat + + return flatten(self.dicts) == flatten(other.dicts) # if it's not comparable return false return False diff --git a/tests/template_tests/test_context.py b/tests/template_tests/test_context.py index f810feda74..64d0df8d10 100644 --- a/tests/template_tests/test_context.py +++ b/tests/template_tests/test_context.py @@ -53,4 +53,22 @@ class ContextTests(TestCase): def test_context_comparable(self): test_data = {'x': 'y', 'v': 'z', 'd': {'o': object, 'a': 'b'}} - self.assertEquals(Context(test_data), Context(test_data)) + self.assertEqual(Context(test_data), Context(test_data)) + + # Regression test for #21765 + a = Context() + b = Context() + self.assertEqual(a, b) + + # update only a + a.update({'a': 1}) + self.assertNotEqual(a, b) + + # update both to check regression + a.update({'c': 3}) + b.update({'c': 3}) + self.assertNotEqual(a, b) + + # make contexts equals again + b.update({'a': 1}) + self.assertEqual(a, b) |
