mirror of https://github.com/django/django.git
Fixed #20404 -- Added a keys() method to ContextList.
It's useful to be able to list all the (flattened) keys of a ContextList, to help you figure out why the variable that's supposed to be there is not. No .values() or .items() added as the definition for those aren't clear. The patch is Chris Wilson's patch from pull request 1065 with some modifications by committer.
This commit is contained in:
parent
5090c7b58b
commit
fa7cb4ef3c
|
@ -60,6 +60,16 @@ class ContextList(list):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def keys(self):
|
||||||
|
"""
|
||||||
|
Flattened keys of subcontexts.
|
||||||
|
"""
|
||||||
|
keys = set()
|
||||||
|
for subcontext in self:
|
||||||
|
for dict in subcontext:
|
||||||
|
keys |= set(dict.keys())
|
||||||
|
return keys
|
||||||
|
|
||||||
|
|
||||||
def instrumented_test_render(self, context):
|
def instrumented_test_render(self, context):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -6,9 +6,8 @@ from __future__ import unicode_literals
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.template import (TemplateDoesNotExist, TemplateSyntaxError,
|
from django.template import (TemplateSyntaxError,
|
||||||
Context, Template, loader)
|
Context, Template, loader)
|
||||||
import django.template.context
|
import django.template.context
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
|
@ -897,6 +896,21 @@ class ContextTests(TestCase):
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
self.assertEqual(e.args[0], 'does-not-exist')
|
self.assertEqual(e.args[0], 'does-not-exist')
|
||||||
|
|
||||||
|
def test_contextlist_keys(self):
|
||||||
|
c1 = Context()
|
||||||
|
c1.update({'hello': 'world', 'goodbye': 'john'})
|
||||||
|
c1.update({'hello': 'dolly', 'dolly': 'parton'})
|
||||||
|
c2 = Context()
|
||||||
|
c2.update({'goodbye': 'world', 'python': 'rocks'})
|
||||||
|
c2.update({'goodbye': 'dolly'})
|
||||||
|
|
||||||
|
l = ContextList([c1, c2])
|
||||||
|
# None, True and False are builtins of BaseContext, and present
|
||||||
|
# in every Context without needing to be added.
|
||||||
|
self.assertEqual(set(['None', 'True', 'False', 'hello', 'goodbye',
|
||||||
|
'python', 'dolly']),
|
||||||
|
l.keys())
|
||||||
|
|
||||||
def test_15368(self):
|
def test_15368(self):
|
||||||
# Need to insert a context processor that assumes certain things about
|
# Need to insert a context processor that assumes certain things about
|
||||||
# the request instance. This triggers a bug caused by some ways of
|
# the request instance. This triggers a bug caused by some ways of
|
||||||
|
|
Loading…
Reference in New Issue