summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2016-02-22 14:05:53 -0500
committerTim Graham <timograham@gmail.com>2016-02-22 17:07:07 -0500
commit3fedfc452fa94f8a6c9a64289d00202313ceb564 (patch)
tree6dd0d4aff262bb1385ca336cd8bd621d1ee6d714
parent174811c5538c8c0b8f66089b31686e80d2bc7d3b (diff)
[1.9.x] Fixed #26253 -- Fixed crashing deprecation shims in SimpleTemplateResponse.
Thanks David Reitter for the report and initial patch.
-rw-r--r--django/template/response.py6
-rw-r--r--docs/releases/1.8.10.txt3
-rw-r--r--docs/releases/1.9.3.txt3
-rw-r--r--tests/template_tests/test_response_deprecations.py42
4 files changed, 51 insertions, 3 deletions
diff --git a/django/template/response.py b/django/template/response.py
index 17b6066a81..a30d982b9c 100644
--- a/django/template/response.py
+++ b/django/template/response.py
@@ -4,7 +4,7 @@ from django.http import HttpResponse
from django.utils import six
from django.utils.deprecation import RemovedInDjango110Warning
-from .backends.django import Template as BackendTemplate
+from .backends.django import DjangoTemplates, Template as BackendTemplate
from .base import Template
from .context import Context, RequestContext, _current_app_undefined
from .loader import get_template, select_template
@@ -25,7 +25,7 @@ class SimpleTemplateResponse(HttpResponse):
"anymore. It may be a backend-specific template like those "
"created by get_template().".format(self.__class__.__name__),
RemovedInDjango110Warning, stacklevel=2)
- template = BackendTemplate(template)
+ template = BackendTemplate(template, DjangoTemplates)
# It would seem obvious to call these next two members 'template' and
# 'context', but those names are reserved as part of the test Client
@@ -95,7 +95,7 @@ class SimpleTemplateResponse(HttpResponse):
"{}.".format(
self.__class__.__name__, new_template.__class__.__name__),
RemovedInDjango110Warning, stacklevel=2)
- new_template = BackendTemplate(new_template)
+ new_template = BackendTemplate(new_template, DjangoTemplates)
return new_template
def resolve_context(self, context):
diff --git a/docs/releases/1.8.10.txt b/docs/releases/1.8.10.txt
index b63ae2abdc..ce695ce2d5 100644
--- a/docs/releases/1.8.10.txt
+++ b/docs/releases/1.8.10.txt
@@ -24,3 +24,6 @@ Bugfixes
* Reallowed dashes in top-level domain names of URLs checked by
``URLValidator`` to fix a regression in Django 1.8 (:ticket:`26204`).
+
+* Fixed some crashing deprecation shims in ``SimpleTemplateResponse``
+ and ``TemplateResponse`` introduced in Django 1.8 (:ticket:`26253`).
diff --git a/docs/releases/1.9.3.txt b/docs/releases/1.9.3.txt
index a7c2b1eba5..ceed260f38 100644
--- a/docs/releases/1.9.3.txt
+++ b/docs/releases/1.9.3.txt
@@ -37,3 +37,6 @@ Bugfixes
* Reallowed dashes in top-level domain names of URLs checked by
``URLValidator`` to fix a regression in Django 1.8 (:ticket:`26204`).
+
+* Fixed some crashing deprecation shims in ``SimpleTemplateResponse``
+ and ``TemplateResponse`` introduced in Django 1.8 (:ticket:`26253`).
diff --git a/tests/template_tests/test_response_deprecations.py b/tests/template_tests/test_response_deprecations.py
new file mode 100644
index 0000000000..dd95a37318
--- /dev/null
+++ b/tests/template_tests/test_response_deprecations.py
@@ -0,0 +1,42 @@
+import warnings
+
+from django.http import HttpRequest
+from django.template import Template
+from django.template.response import TemplateResponse
+from django.test import SimpleTestCase
+
+
+class MyTemplateResponse(TemplateResponse):
+ def resolve_template(self, template_name):
+ return Template(template_name)
+
+
+class DeprecationTests(SimpleTestCase):
+
+ def test_template_response(self):
+ msg = (
+ "TemplateResponse's template argument cannot be a "
+ "django.template.Template anymore. It may be a backend-specific "
+ "template like those created by get_template()."
+ )
+ with warnings.catch_warnings(record=True) as warns:
+ warnings.simplefilter('always')
+ response = TemplateResponse(HttpRequest(), Template('foo'))
+ response.render()
+ self.assertEqual(response.content, b'foo')
+ self.assertEqual(len(warns), 1)
+ self.assertEqual(str(warns[0].message), msg)
+
+ def test_custom_template_response(self):
+ response = MyTemplateResponse(HttpRequest(), 'baz')
+ msg = (
+ "MyTemplateResponse.resolve_template() must return a "
+ "backend-specific template like those created by get_template(), "
+ "not a Template."
+ )
+ with warnings.catch_warnings(record=True) as warns:
+ warnings.simplefilter('always')
+ response.render()
+ self.assertEqual(response.content, b'baz')
+ self.assertEqual(len(warns), 1)
+ self.assertEqual(str(warns[0].message), msg)