Browse Source

Fixed #24273 -- Allowed copying RequestContext more than once.

Thanks Collin Anderson for the report.
Aymeric Augustin 10 years ago
parent
commit
31d3a35579
2 changed files with 8 additions and 2 deletions
  1. 2 1
      django/template/context.py
  2. 6 1
      tests/template_tests/test_context.py

+ 2 - 1
django/template/context.py

@@ -232,5 +232,6 @@ class RequestContext(Context):
         new_context = super(RequestContext, self).new(values)
         # This is for backwards-compatibility: RequestContexts created via
         # Context.new don't include values from context processors.
-        del new_context._processors_index
+        if hasattr(new_context, '_processors_index'):
+            del new_context._processors_index
         return new_context

+ 6 - 1
tests/template_tests/test_context.py

@@ -2,7 +2,8 @@
 
 from unittest import TestCase
 
-from django.template import Context, Variable, VariableDoesNotExist
+from django.http import HttpRequest
+from django.template import Context, RequestContext, Variable, VariableDoesNotExist
 from django.template.context import RenderContext
 
 
@@ -83,3 +84,7 @@ class ContextTests(TestCase):
         # make contexts equals again
         b.update({'a': 1})
         self.assertEqual(a, b)
+
+    def test_copy_request_context_twice(self):
+        # Regression test for #24273 - this doesn't raise an exception
+        RequestContext(HttpRequest()).new().new()