mirror of https://github.com/django/django.git
Fixed #24847 -- Prevented items set on a RequestContext from being lost.
This commit is contained in:
parent
70be31bba7
commit
300e8baf94
|
@ -226,7 +226,13 @@ class RequestContext(Context):
|
||||||
self.request = request
|
self.request = request
|
||||||
self._processors = () if processors is None else tuple(processors)
|
self._processors = () if processors is None else tuple(processors)
|
||||||
self._processors_index = len(self.dicts)
|
self._processors_index = len(self.dicts)
|
||||||
self.update({}) # placeholder for context processors output
|
|
||||||
|
# placeholder for context processors output
|
||||||
|
self.update({})
|
||||||
|
|
||||||
|
# empty dict for any new modifications
|
||||||
|
# (so that context processors don't overwrite them)
|
||||||
|
self.update({})
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def bind_template(self, template):
|
def bind_template(self, template):
|
||||||
|
|
|
@ -22,3 +22,6 @@ Bugfixes
|
||||||
|
|
||||||
* Reverted an optimization to the CSRF template context processor which caused
|
* Reverted an optimization to the CSRF template context processor which caused
|
||||||
a regression (:ticket:`24836`).
|
a regression (:ticket:`24836`).
|
||||||
|
|
||||||
|
* Fixed a regression which caused template context processors to overwrite
|
||||||
|
variables set on a ``RequestContext`` after it's created (:ticket:`24847`).
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
from django.http import HttpRequest
|
from django.http import HttpRequest
|
||||||
from django.template import (
|
from django.template import (
|
||||||
Context, Engine, RequestContext, Variable, VariableDoesNotExist,
|
Context, Engine, RequestContext, Template, Variable, VariableDoesNotExist,
|
||||||
)
|
)
|
||||||
from django.template.context import RenderContext
|
from django.template.context import RenderContext
|
||||||
from django.test import RequestFactory, SimpleTestCase
|
from django.test import RequestFactory, SimpleTestCase
|
||||||
|
@ -153,8 +153,8 @@ class RequestContextTests(SimpleTestCase):
|
||||||
request = RequestFactory().get('/')
|
request = RequestFactory().get('/')
|
||||||
ctx = RequestContext(request, {})
|
ctx = RequestContext(request, {})
|
||||||
# The stack should now contain 3 items:
|
# The stack should now contain 3 items:
|
||||||
# [builtins, supplied context, context processor]
|
# [builtins, supplied context, context processor, empty dict]
|
||||||
self.assertEqual(len(ctx.dicts), 3)
|
self.assertEqual(len(ctx.dicts), 4)
|
||||||
|
|
||||||
def test_context_comparable(self):
|
def test_context_comparable(self):
|
||||||
# Create an engine without any context processors.
|
# Create an engine without any context processors.
|
||||||
|
@ -168,3 +168,10 @@ class RequestContextTests(SimpleTestCase):
|
||||||
RequestContext(request, dict_=test_data),
|
RequestContext(request, dict_=test_data),
|
||||||
RequestContext(request, dict_=test_data),
|
RequestContext(request, dict_=test_data),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_modify_context_and_render(self):
|
||||||
|
template = Template('{{ foo }}')
|
||||||
|
request = RequestFactory().get('/')
|
||||||
|
context = RequestContext(request, {})
|
||||||
|
context['foo'] = 'foo'
|
||||||
|
self.assertEqual(template.render(context), 'foo')
|
||||||
|
|
Loading…
Reference in New Issue