Commit 43c45cc9 by Tom Christie

Merge pull request #3654 from andreif/fix/deprecation-warning-1.9

Fix template.render deprecation warnings for Django 1.9
parents 04158e18 802ee5d0
...@@ -9,6 +9,7 @@ from __future__ import unicode_literals ...@@ -9,6 +9,7 @@ from __future__ import unicode_literals
import django import django
from django.conf import settings from django.conf import settings
from django.db import connection, transaction from django.db import connection, transaction
from django.template import Context, RequestContext, Template
from django.utils import six from django.utils import six
from django.views.generic import View from django.views.generic import View
...@@ -191,6 +192,7 @@ try: ...@@ -191,6 +192,7 @@ try:
except ImportError: except ImportError:
DecimalValidator = None DecimalValidator = None
def set_rollback(): def set_rollback():
if hasattr(transaction, 'set_rollback'): if hasattr(transaction, 'set_rollback'):
if connection.settings_dict.get('ATOMIC_REQUESTS', False): if connection.settings_dict.get('ATOMIC_REQUESTS', False):
...@@ -206,3 +208,25 @@ def set_rollback(): ...@@ -206,3 +208,25 @@ def set_rollback():
else: else:
# transaction not managed # transaction not managed
pass pass
def template_render(template, context=None, request=None):
"""
Passing Context or RequestContext to Template.render is deprecated in 1.9+,
see https://github.com/django/django/pull/3883 and
https://github.com/django/django/blob/1.9rc1/django/template/backends/django.py#L82-L84
:param template: Template instance
:param context: dict
:param request: Request instance
:return: rendered template as SafeText instance
"""
if django.VERSION < (1, 9) or isinstance(template, Template):
if request:
context = RequestContext(request, context)
else:
context = Context(context)
return template.render(context)
# backends template, e.g. django.template.backends.django.Template
else:
return template.render(context, request=request)
...@@ -10,12 +10,12 @@ from functools import reduce ...@@ -10,12 +10,12 @@ from functools import reduce
from django.conf import settings from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.db import models from django.db import models
from django.template import Context, loader from django.template import loader
from django.utils import six from django.utils import six
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from rest_framework.compat import ( from rest_framework.compat import (
crispy_forms, distinct, django_filters, guardian crispy_forms, distinct, django_filters, guardian, template_render
) )
from rest_framework.settings import api_settings from rest_framework.settings import api_settings
...@@ -122,11 +122,11 @@ class DjangoFilterBackend(BaseFilterBackend): ...@@ -122,11 +122,11 @@ class DjangoFilterBackend(BaseFilterBackend):
filter_instance = filter_class(request.query_params, queryset=queryset) filter_instance = filter_class(request.query_params, queryset=queryset)
else: else:
filter_instance = None filter_instance = None
context = Context({ context = {
'filter': filter_instance 'filter': filter_instance
}) }
template = loader.get_template(self.template) template = loader.get_template(self.template)
return template.render(context) return template_render(template, context)
class SearchFilter(BaseFilterBackend): class SearchFilter(BaseFilterBackend):
...@@ -185,12 +185,12 @@ class SearchFilter(BaseFilterBackend): ...@@ -185,12 +185,12 @@ class SearchFilter(BaseFilterBackend):
term = self.get_search_terms(request) term = self.get_search_terms(request)
term = term[0] if term else '' term = term[0] if term else ''
context = Context({ context = {
'param': self.search_param, 'param': self.search_param,
'term': term 'term': term
}) }
template = loader.get_template(self.template) template = loader.get_template(self.template)
return template.render(context) return template_render(template, context)
class OrderingFilter(BaseFilterBackend): class OrderingFilter(BaseFilterBackend):
...@@ -284,8 +284,8 @@ class OrderingFilter(BaseFilterBackend): ...@@ -284,8 +284,8 @@ class OrderingFilter(BaseFilterBackend):
def to_html(self, request, queryset, view): def to_html(self, request, queryset, view):
template = loader.get_template(self.template) template = loader.get_template(self.template)
context = Context(self.get_template_context(request, queryset, view)) context = self.get_template_context(request, queryset, view)
return template.render(context) return template_render(template, context)
class DjangoObjectPermissionsFilter(BaseFilterBackend): class DjangoObjectPermissionsFilter(BaseFilterBackend):
......
...@@ -10,11 +10,12 @@ from collections import OrderedDict, namedtuple ...@@ -10,11 +10,12 @@ from collections import OrderedDict, namedtuple
from django.core.paginator import Paginator as DjangoPaginator from django.core.paginator import Paginator as DjangoPaginator
from django.core.paginator import InvalidPage from django.core.paginator import InvalidPage
from django.template import Context, loader from django.template import loader
from django.utils import six from django.utils import six
from django.utils.six.moves.urllib import parse as urlparse from django.utils.six.moves.urllib import parse as urlparse
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from rest_framework.compat import template_render
from rest_framework.exceptions import NotFound from rest_framework.exceptions import NotFound
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.settings import api_settings from rest_framework.settings import api_settings
...@@ -273,8 +274,8 @@ class PageNumberPagination(BasePagination): ...@@ -273,8 +274,8 @@ class PageNumberPagination(BasePagination):
def to_html(self): def to_html(self):
template = loader.get_template(self.template) template = loader.get_template(self.template)
context = Context(self.get_html_context()) context = self.get_html_context()
return template.render(context) return template_render(template, context)
class LimitOffsetPagination(BasePagination): class LimitOffsetPagination(BasePagination):
...@@ -389,8 +390,8 @@ class LimitOffsetPagination(BasePagination): ...@@ -389,8 +390,8 @@ class LimitOffsetPagination(BasePagination):
def to_html(self): def to_html(self):
template = loader.get_template(self.template) template = loader.get_template(self.template)
context = Context(self.get_html_context()) context = self.get_html_context()
return template.render(context) return template_render(template, context)
class CursorPagination(BasePagination): class CursorPagination(BasePagination):
...@@ -692,5 +693,5 @@ class CursorPagination(BasePagination): ...@@ -692,5 +693,5 @@ class CursorPagination(BasePagination):
def to_html(self): def to_html(self):
template = loader.get_template(self.template) template = loader.get_template(self.template)
context = Context(self.get_html_context()) context = self.get_html_context()
return template.render(context) return template_render(template, context)
...@@ -15,13 +15,13 @@ from django import forms ...@@ -15,13 +15,13 @@ from django import forms
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.core.paginator import Page from django.core.paginator import Page
from django.http.multipartparser import parse_header from django.http.multipartparser import parse_header
from django.template import Context, RequestContext, Template, loader from django.template import Template, loader
from django.test.client import encode_multipart from django.test.client import encode_multipart
from django.utils import six from django.utils import six
from rest_framework import VERSION, exceptions, serializers, status from rest_framework import VERSION, exceptions, serializers, status
from rest_framework.compat import ( from rest_framework.compat import (
INDENT_SEPARATORS, LONG_SEPARATORS, SHORT_SEPARATORS INDENT_SEPARATORS, LONG_SEPARATORS, SHORT_SEPARATORS, template_render
) )
from rest_framework.exceptions import ParseError from rest_framework.exceptions import ParseError
from rest_framework.request import is_form_media_type, override_method from rest_framework.request import is_form_media_type, override_method
...@@ -168,7 +168,7 @@ class TemplateHTMLRenderer(BaseRenderer): ...@@ -168,7 +168,7 @@ class TemplateHTMLRenderer(BaseRenderer):
template = self.resolve_template(template_names) template = self.resolve_template(template_names)
context = self.resolve_context(data, request, response) context = self.resolve_context(data, request, response)
return template.render(context) return template_render(template, context, request=request)
def resolve_template(self, template_names): def resolve_template(self, template_names):
return loader.select_template(template_names) return loader.select_template(template_names)
...@@ -176,7 +176,7 @@ class TemplateHTMLRenderer(BaseRenderer): ...@@ -176,7 +176,7 @@ class TemplateHTMLRenderer(BaseRenderer):
def resolve_context(self, data, request, response): def resolve_context(self, data, request, response):
if response.exception: if response.exception:
data['status_code'] = response.status_code data['status_code'] = response.status_code
return RequestContext(request, data) return data
def get_template_names(self, response, view): def get_template_names(self, response, view):
if response.template_name: if response.template_name:
...@@ -230,7 +230,7 @@ class StaticHTMLRenderer(TemplateHTMLRenderer): ...@@ -230,7 +230,7 @@ class StaticHTMLRenderer(TemplateHTMLRenderer):
request = renderer_context['request'] request = renderer_context['request']
template = self.get_exception_template(response) template = self.get_exception_template(response)
context = self.resolve_context(data, request, response) context = self.resolve_context(data, request, response)
return template.render(context) return template_render(template, context, request=request)
return data return data
...@@ -333,8 +333,8 @@ class HTMLFormRenderer(BaseRenderer): ...@@ -333,8 +333,8 @@ class HTMLFormRenderer(BaseRenderer):
template_name = style['template_pack'].strip('/') + '/' + style['base_template'] template_name = style['template_pack'].strip('/') + '/' + style['base_template']
template = loader.get_template(template_name) template = loader.get_template(template_name)
context = Context({'field': field, 'style': style}) context = {'field': field, 'style': style}
return template.render(context) return template_render(template, context)
def render(self, data, accepted_media_type=None, renderer_context=None): def render(self, data, accepted_media_type=None, renderer_context=None):
""" """
...@@ -350,11 +350,11 @@ class HTMLFormRenderer(BaseRenderer): ...@@ -350,11 +350,11 @@ class HTMLFormRenderer(BaseRenderer):
template_pack = style['template_pack'].strip('/') template_pack = style['template_pack'].strip('/')
template_name = template_pack + '/' + self.base_template template_name = template_pack + '/' + self.base_template
template = loader.get_template(template_name) template = loader.get_template(template_name)
context = Context({ context = {
'form': form, 'form': form,
'style': style 'style': style
}) }
return template.render(context) return template_render(template, context)
class BrowsableAPIRenderer(BaseRenderer): class BrowsableAPIRenderer(BaseRenderer):
...@@ -600,8 +600,8 @@ class BrowsableAPIRenderer(BaseRenderer): ...@@ -600,8 +600,8 @@ class BrowsableAPIRenderer(BaseRenderer):
return return
template = loader.get_template(self.filter_template) template = loader.get_template(self.filter_template)
context = Context({'elements': elements}) context = {'elements': elements}
return template.render(context) return template_render(template, context)
def get_context(self, data, accepted_media_type, renderer_context): def get_context(self, data, accepted_media_type, renderer_context):
""" """
...@@ -672,8 +672,7 @@ class BrowsableAPIRenderer(BaseRenderer): ...@@ -672,8 +672,7 @@ class BrowsableAPIRenderer(BaseRenderer):
template = loader.get_template(self.template) template = loader.get_template(self.template)
context = self.get_context(data, accepted_media_type, renderer_context) context = self.get_context(data, accepted_media_type, renderer_context)
context = RequestContext(renderer_context['request'], context) ret = template_render(template, context, request=renderer_context['request'])
ret = template.render(context)
# Munge DELETE Response code to allow us to return content # Munge DELETE Response code to allow us to return content
# (Do this *after* we've rendered the template so that we include # (Do this *after* we've rendered the template so that we include
...@@ -709,8 +708,7 @@ class AdminRenderer(BrowsableAPIRenderer): ...@@ -709,8 +708,7 @@ class AdminRenderer(BrowsableAPIRenderer):
template = loader.get_template(self.template) template = loader.get_template(self.template)
context = self.get_context(data, accepted_media_type, renderer_context) context = self.get_context(data, accepted_media_type, renderer_context)
context = RequestContext(renderer_context['request'], context) ret = template_render(template, context, request=renderer_context['request'])
ret = template.render(context)
# Creation and deletion should use redirects in the admin style. # Creation and deletion should use redirects in the admin style.
if (response.status_code == status.HTTP_201_CREATED) and ('Location' in response): if (response.status_code == status.HTTP_201_CREATED) and ('Location' in response):
......
...@@ -4,12 +4,13 @@ import re ...@@ -4,12 +4,13 @@ import re
from django import template from django import template
from django.core.urlresolvers import NoReverseMatch, reverse from django.core.urlresolvers import NoReverseMatch, reverse
from django.template import Context, loader from django.template import loader
from django.utils import six from django.utils import six
from django.utils.encoding import force_text, iri_to_uri from django.utils.encoding import force_text, iri_to_uri
from django.utils.html import escape, format_html, smart_urlquote from django.utils.html import escape, format_html, smart_urlquote
from django.utils.safestring import SafeData, mark_safe from django.utils.safestring import SafeData, mark_safe
from rest_framework.compat import template_render
from rest_framework.renderers import HTMLFormRenderer from rest_framework.renderers import HTMLFormRenderer
from rest_framework.utils.urls import replace_query_param from rest_framework.utils.urls import replace_query_param
...@@ -128,12 +129,12 @@ def format_value(value): ...@@ -128,12 +129,12 @@ def format_value(value):
template = loader.get_template('rest_framework/admin/list_value.html') template = loader.get_template('rest_framework/admin/list_value.html')
else: else:
template = loader.get_template('rest_framework/admin/simple_list_value.html') template = loader.get_template('rest_framework/admin/simple_list_value.html')
context = Context({'value': value}) context = {'value': value}
return template.render(context) return template_render(template, context)
elif isinstance(value, dict): elif isinstance(value, dict):
template = loader.get_template('rest_framework/admin/dict_value.html') template = loader.get_template('rest_framework/admin/dict_value.html')
context = Context({'value': value}) context = {'value': value}
return template.render(context) return template_render(template, context)
elif isinstance(value, six.string_types): elif isinstance(value, six.string_types):
if ( if (
(value.startswith('http:') or value.startswith('https:')) and not (value.startswith('http:') or value.startswith('https:')) and not
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment