Removed support for passing a context to a generic Template.render().

Per deprecation timeline; refs a3e783fe11.
This commit is contained in:
Tim Graham 2015-09-05 10:25:43 -04:00
parent 4811f09fa3
commit 9114fe8ada
4 changed files with 4 additions and 70 deletions

View File

@ -2,18 +2,16 @@
from __future__ import absolute_import from __future__ import absolute_import
import sys import sys
import warnings
from importlib import import_module from importlib import import_module
from pkgutil import walk_packages from pkgutil import walk_packages
from django.apps import apps from django.apps import apps
from django.conf import settings from django.conf import settings
from django.template import TemplateDoesNotExist from django.template import TemplateDoesNotExist
from django.template.context import Context, RequestContext, make_context from django.template.context import make_context
from django.template.engine import Engine from django.template.engine import Engine
from django.template.library import InvalidTemplateLibrary from django.template.library import InvalidTemplateLibrary
from django.utils import six from django.utils import six
from django.utils.deprecation import RemovedInDjango110Warning
from .base import BaseEngine from .base import BaseEngine
@ -62,35 +60,7 @@ class Template(object):
return self.template.origin return self.template.origin
def render(self, context=None, request=None): def render(self, context=None, request=None):
# A deprecation path is required here to cover the following usage: context = make_context(context, request)
# >>> from django.template import Context
# >>> from django.template.loader import get_template
# >>> template = get_template('hello.html')
# >>> template.render(Context({'name': 'world'}))
# In Django 1.7 get_template() returned a django.template.Template.
# In Django 1.8 it returns a django.template.backends.django.Template.
# In Django 1.10 the isinstance checks should be removed. If passing a
# Context or a RequestContext works by accident, it won't be an issue
# per se, but it won't be officially supported either.
if isinstance(context, RequestContext):
if request is not None and request is not context.request:
raise ValueError(
"render() was called with a RequestContext and a request "
"argument which refer to different requests. Make sure "
"that the context argument is a dict or at least that "
"the two arguments refer to the same request.")
warnings.warn(
"render() must be called with a dict, not a RequestContext.",
RemovedInDjango110Warning, stacklevel=2)
elif isinstance(context, Context):
warnings.warn(
"render() must be called with a dict, not a Context.",
RemovedInDjango110Warning, stacklevel=2)
else:
context = make_context(context, request)
try: try:
return self.template.render(context) return self.template.render(context)
except TemplateDoesNotExist as exc: except TemplateDoesNotExist as exc:

View File

@ -1,6 +1,5 @@
from django.test import SimpleTestCase, ignore_warnings, override_settings from django.test import SimpleTestCase, override_settings
from django.test.utils import require_jinja2 from django.test.utils import require_jinja2
from django.utils.deprecation import RemovedInDjango110Warning
@override_settings( @override_settings(
@ -39,16 +38,6 @@ class ShortcutTests(SimpleTestCase):
response = self.client.get('/render_to_response/using/?using=jinja2') response = self.client.get('/render_to_response/using/?using=jinja2')
self.assertEqual(response.content, b'Jinja2\n') self.assertEqual(response.content, b'Jinja2\n')
@ignore_warnings(category=RemovedInDjango110Warning)
def test_render_to_response_with_context_instance_misuse(self):
"""
For backwards-compatibility, ensure that it's possible to pass a
RequestContext instance in the dictionary argument instead of the
context_instance argument.
"""
response = self.client.get('/render_to_response/context_instance_misuse/')
self.assertContains(response, 'context processor output')
def test_render(self): def test_render(self):
response = self.client.get('/render/') response = self.client.get('/render/')
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)

View File

@ -1,10 +1,8 @@
from template_tests.test_response import test_processor_name from template_tests.test_response import test_processor_name
from django.template import RequestContext
from django.template.backends.django import DjangoTemplates from django.template.backends.django import DjangoTemplates
from django.template.library import InvalidTemplateLibrary from django.template.library import InvalidTemplateLibrary
from django.test import RequestFactory, ignore_warnings, override_settings from django.test import RequestFactory, override_settings
from django.utils.deprecation import RemovedInDjango110Warning
from .test_dummy import TemplateStringsTests from .test_dummy import TemplateStringsTests
@ -36,23 +34,6 @@ class DjangoTemplatesTests(TemplateStringsTests):
content = template.render({'processors': 'no'}, request) content = template.render({'processors': 'no'}, request)
self.assertEqual(content, 'no') self.assertEqual(content, 'no')
@ignore_warnings(category=RemovedInDjango110Warning)
def test_request_context_conflicts_with_request(self):
template = self.engine.from_string('hello')
request = RequestFactory().get('/')
request_context = RequestContext(request)
# This doesn't raise an exception.
template.render(request_context, request)
other_request = RequestFactory().get('/')
msg = ("render() was called with a RequestContext and a request "
"argument which refer to different requests. Make sure "
"that the context argument is a dict or at least that "
"the two arguments refer to the same request.")
with self.assertRaisesMessage(ValueError, msg):
template.render(request_context, other_request)
@override_settings(INSTALLED_APPS=['template_backends.apps.good']) @override_settings(INSTALLED_APPS=['template_backends.apps.good'])
def test_templatetag_discovery(self): def test_templatetag_discovery(self):
engine = DjangoTemplates({ engine = DjangoTemplates({

View File

@ -248,12 +248,6 @@ class TemplateResponseTest(SimpleTestCase):
{'foo': 'bar'}).render() {'foo': 'bar'}).render()
self.assertEqual(response.content, b'baryes') self.assertEqual(response.content, b'baryes')
@ignore_warnings(category=RemovedInDjango110Warning)
def test_render_with_context(self):
response = self._response('{{ foo }}{{ processors }}',
Context({'foo': 'bar'})).render()
self.assertEqual(response.content, b'bar')
def test_context_processor_priority(self): def test_context_processor_priority(self):
# context processors should be overridden by passed-in context # context processors should be overridden by passed-in context
response = self._response('{{ foo }}{{ processors }}', response = self._response('{{ foo }}{{ processors }}',