Fixed #26911 -- Removed NoReverseMatch silencing in RedirectView.

This commit is contained in:
Grzegorz Tężycki 2017-02-28 20:07:57 +01:00 committed by Tim Graham
parent 2863e79a5c
commit fede65260a
3 changed files with 5 additions and 10 deletions

View File

@ -7,7 +7,7 @@ from django.http import (
HttpResponsePermanentRedirect, HttpResponseRedirect, HttpResponsePermanentRedirect, HttpResponseRedirect,
) )
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.urls import NoReverseMatch, reverse from django.urls import reverse
from django.utils.decorators import classonlymethod from django.utils.decorators import classonlymethod
logger = logging.getLogger('django.request') logger = logging.getLogger('django.request')
@ -174,10 +174,7 @@ class RedirectView(View):
if self.url: if self.url:
url = self.url % kwargs url = self.url % kwargs
elif self.pattern_name: elif self.pattern_name:
try: url = reverse(self.pattern_name, args=args, kwargs=kwargs)
url = reverse(self.pattern_name, args=args, kwargs=kwargs)
except NoReverseMatch:
return None
else: else:
return None return None

View File

@ -283,6 +283,9 @@ Miscellaneous
instead of dotted Python path strings. Django favors callable references instead of dotted Python path strings. Django favors callable references
since they provide better performance and debugging experience. since they provide better performance and debugging experience.
* :class:`~django.views.generic.base.RedirectView` no longer silences
``NoReverseMatch`` if the ``pattern_name`` doesn't exist.
.. _deprecated-features-2.0: .. _deprecated-features-2.0:
Features deprecated in 2.0 Features deprecated in 2.0

View File

@ -407,11 +407,6 @@ class RedirectViewTest(SimpleTestCase):
self.assertEqual(response.status_code, 302) self.assertEqual(response.status_code, 302)
self.assertEqual(response['Location'], '/detail/artist/1/') self.assertEqual(response['Location'], '/detail/artist/1/')
def test_wrong_named_url_pattern(self):
"A wrong pattern name returns 410 GONE"
response = RedirectView.as_view(pattern_name='wrong.pattern_name')(self.rf.get('/foo/'))
self.assertEqual(response.status_code, 410)
def test_redirect_POST(self): def test_redirect_POST(self):
"Default is a temporary redirect" "Default is a temporary redirect"
response = RedirectView.as_view(url='/bar/')(self.rf.post('/foo/')) response = RedirectView.as_view(url='/bar/')(self.rf.post('/foo/'))