summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2020-08-24 08:58:36 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-08-24 11:38:57 +0200
commitf247c66bb5f95541d16143ef37452bb1dfeacc3e (patch)
treeab0209d645b9bb8b19c1863cf209d04751f9c3df
parent5d55b878cf219589404630b2d6004f3b33071241 (diff)
[3.1.x] Refs #31877 -- Reverted "Fixes #31877 -- Used lazy() for TemplateView kwarg deprecation warning."
This reverts commit 20799cc0a6d98816b9ef0577e24691bd26b80d7d. Backport of 04e87e79a0bd2b1b9fdc30f884a637a3268733f0 from master
-rw-r--r--django/views/generic/base.py5
-rw-r--r--docs/releases/3.1.1.txt4
-rw-r--r--tests/generic_views/test_base.py22
3 files changed, 5 insertions, 26 deletions
diff --git a/django/views/generic/base.py b/django/views/generic/base.py
index 7e5c06874d..ea5baca08d 100644
--- a/django/views/generic/base.py
+++ b/django/views/generic/base.py
@@ -11,7 +11,7 @@ from django.template.response import TemplateResponse
from django.urls import reverse
from django.utils.decorators import classonlymethod
from django.utils.deprecation import RemovedInDjango40Warning
-from django.utils.functional import lazy
+from django.utils.functional import SimpleLazyObject
logger = logging.getLogger('django.request')
@@ -169,6 +169,7 @@ def _wrap_url_kwargs_with_deprecation_warning(url_kwargs):
context_kwargs = {}
for key, value in url_kwargs.items():
# Bind into function closure.
+ @SimpleLazyObject
def access_value(key=key, value=value):
warnings.warn(
'TemplateView passing URL kwargs to the context is '
@@ -177,7 +178,7 @@ def _wrap_url_kwargs_with_deprecation_warning(url_kwargs):
RemovedInDjango40Warning, stacklevel=2,
)
return value
- context_kwargs[key] = lazy(access_value, type(value))()
+ context_kwargs[key] = access_value
return context_kwargs
diff --git a/docs/releases/3.1.1.txt b/docs/releases/3.1.1.txt
index d2c08fed5a..0a0eeb461a 100644
--- a/docs/releases/3.1.1.txt
+++ b/docs/releases/3.1.1.txt
@@ -26,10 +26,6 @@ Bugfixes
related fields pointing to a proxy model in the ``of`` argument, the
corresponding model was not locked (:ticket:`31866`).
-* Fixed a regression in Django 3.1 that caused a crash when passing deprecated
- keyword arguments to a queryset in ``TemplateView.get_context_data()``
- (:ticket:`31877`).
-
* Fixed a data loss possibility, following a regression in Django 2.0, when
copying model instances with a cached fields value (:ticket:`31863`).
diff --git a/tests/generic_views/test_base.py b/tests/generic_views/test_base.py
index eeb9fd08d0..d498d23a68 100644
--- a/tests/generic_views/test_base.py
+++ b/tests/generic_views/test_base.py
@@ -3,8 +3,7 @@ import time
from django.core.exceptions import ImproperlyConfigured
from django.http import HttpResponse
from django.test import (
- RequestFactory, SimpleTestCase, TestCase, ignore_warnings,
- override_settings,
+ RequestFactory, SimpleTestCase, ignore_warnings, override_settings,
)
from django.test.utils import require_jinja2
from django.urls import resolve
@@ -12,7 +11,6 @@ from django.utils.deprecation import RemovedInDjango40Warning
from django.views.generic import RedirectView, TemplateView, View
from . import views
-from .models import Artist
class SimpleView(View):
@@ -573,9 +571,7 @@ class SingleObjectTemplateResponseMixinTest(SimpleTestCase):
@override_settings(ROOT_URLCONF='generic_views.urls')
-class DeprecationTests(TestCase):
- rf = RequestFactory()
-
+class DeprecationTests(SimpleTestCase):
@ignore_warnings(category=RemovedInDjango40Warning)
def test_template_params(self):
"""A generic template view passes kwargs as context."""
@@ -607,17 +603,3 @@ class DeprecationTests(TestCase):
str(response.context['foo2'])
self.assertEqual(response.context['key'], 'value')
self.assertIsInstance(response.context['view'], View)
-
- @ignore_warnings(category=RemovedInDjango40Warning)
- def test_template_params_filtering(self):
- class ArtistView(TemplateView):
- template_name = 'generic_views/about.html'
-
- def get_context_data(self, *, artist_name, **kwargs):
- context = super().get_context_data(**kwargs)
- artist = Artist.objects.get(name=artist_name)
- return {**context, 'artist': artist}
-
- artist = Artist.objects.create(name='Rene Magritte')
- response = ArtistView.as_view()(self.rf.get('/'), artist_name=artist.name)
- self.assertEqual(response.context_data['artist'], artist)