Removed support for passing a context to a generic Template.render().
Per deprecation timeline; refs a3e783fe11
.
This commit is contained in:
parent
4811f09fa3
commit
9114fe8ada
|
@ -2,18 +2,16 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import sys
|
||||
import warnings
|
||||
from importlib import import_module
|
||||
from pkgutil import walk_packages
|
||||
|
||||
from django.apps import apps
|
||||
from django.conf import settings
|
||||
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.library import InvalidTemplateLibrary
|
||||
from django.utils import six
|
||||
from django.utils.deprecation import RemovedInDjango110Warning
|
||||
|
||||
from .base import BaseEngine
|
||||
|
||||
|
@ -62,35 +60,7 @@ class Template(object):
|
|||
return self.template.origin
|
||||
|
||||
def render(self, context=None, request=None):
|
||||
# A deprecation path is required here to cover the following usage:
|
||||
# >>> 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:
|
||||
return self.template.render(context)
|
||||
except TemplateDoesNotExist as exc:
|
||||
|
|
|
@ -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.utils.deprecation import RemovedInDjango110Warning
|
||||
|
||||
|
||||
@override_settings(
|
||||
|
@ -39,16 +38,6 @@ class ShortcutTests(SimpleTestCase):
|
|||
response = self.client.get('/render_to_response/using/?using=jinja2')
|
||||
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):
|
||||
response = self.client.get('/render/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
from template_tests.test_response import test_processor_name
|
||||
|
||||
from django.template import RequestContext
|
||||
from django.template.backends.django import DjangoTemplates
|
||||
from django.template.library import InvalidTemplateLibrary
|
||||
from django.test import RequestFactory, ignore_warnings, override_settings
|
||||
from django.utils.deprecation import RemovedInDjango110Warning
|
||||
from django.test import RequestFactory, override_settings
|
||||
|
||||
from .test_dummy import TemplateStringsTests
|
||||
|
||||
|
@ -36,23 +34,6 @@ class DjangoTemplatesTests(TemplateStringsTests):
|
|||
content = template.render({'processors': 'no'}, request)
|
||||
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'])
|
||||
def test_templatetag_discovery(self):
|
||||
engine = DjangoTemplates({
|
||||
|
|
|
@ -248,12 +248,6 @@ class TemplateResponseTest(SimpleTestCase):
|
|||
{'foo': 'bar'}).render()
|
||||
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):
|
||||
# context processors should be overridden by passed-in context
|
||||
response = self._response('{{ foo }}{{ processors }}',
|
||||
|
|
Loading…
Reference in New Issue