mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Fixed #15273 -- Extend RedirectView to allow reversal by name.
Thanks to @DrMeers for the report and @ludwigkraatz for the initial patch.
This commit is contained in:
@@ -5,6 +5,7 @@ from functools import update_wrapper
|
||||
|
||||
from django import http
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.core.urlresolvers import reverse, NoReverseMatch
|
||||
from django.template.response import TemplateResponse
|
||||
from django.utils.decorators import classonlymethod
|
||||
from django.utils import six
|
||||
@@ -160,9 +161,10 @@ class RedirectView(View):
|
||||
"""
|
||||
permanent = True
|
||||
url = None
|
||||
pattern_name = None
|
||||
query_string = False
|
||||
|
||||
def get_redirect_url(self, **kwargs):
|
||||
def get_redirect_url(self, *args, **kwargs):
|
||||
"""
|
||||
Return the URL redirect to. Keyword arguments from the
|
||||
URL pattern match generating the redirect request
|
||||
@@ -170,15 +172,21 @@ class RedirectView(View):
|
||||
"""
|
||||
if self.url:
|
||||
url = self.url % kwargs
|
||||
args = self.request.META.get('QUERY_STRING', '')
|
||||
if args and self.query_string:
|
||||
url = "%s?%s" % (url, args)
|
||||
return url
|
||||
elif self.pattern_name:
|
||||
try:
|
||||
url = reverse(self.pattern_name, args=args, kwargs=kwargs)
|
||||
except NoReverseMatch:
|
||||
return None
|
||||
else:
|
||||
return None
|
||||
|
||||
args = self.request.META.get('QUERY_STRING', '')
|
||||
if args and self.query_string:
|
||||
url = "%s?%s" % (url, args)
|
||||
return url
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
url = self.get_redirect_url(**kwargs)
|
||||
url = self.get_redirect_url(*args, **kwargs)
|
||||
if url:
|
||||
if self.permanent:
|
||||
return http.HttpResponsePermanentRedirect(url)
|
||||
|
||||
Reference in New Issue
Block a user