Fixed #31114 -- Fixed HttpRequest.build_absolute_uri() crash with reverse_lazy() locations.
This commit is contained in:
parent
5660267e5b
commit
e42b68debf
|
@ -191,6 +191,9 @@ class HttpRequest:
|
||||||
# Make it an absolute url (but schemeless and domainless) for the
|
# Make it an absolute url (but schemeless and domainless) for the
|
||||||
# edge case that the path starts with '//'.
|
# edge case that the path starts with '//'.
|
||||||
location = '//%s' % self.get_full_path()
|
location = '//%s' % self.get_full_path()
|
||||||
|
else:
|
||||||
|
# Coerce lazy locations.
|
||||||
|
location = str(location)
|
||||||
bits = urlsplit(location)
|
bits = urlsplit(location)
|
||||||
if not (bits.scheme and bits.netloc):
|
if not (bits.scheme and bits.netloc):
|
||||||
# Handle the simple, most common case. If the location is absolute
|
# Handle the simple, most common case. If the location is absolute
|
||||||
|
|
|
@ -13,7 +13,9 @@ from django.http import (
|
||||||
HttpRequest, HttpResponsePermanentRedirect, HttpResponseRedirect,
|
HttpRequest, HttpResponsePermanentRedirect, HttpResponseRedirect,
|
||||||
)
|
)
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.test import SimpleTestCase, TestCase, override_settings
|
from django.test import (
|
||||||
|
RequestFactory, SimpleTestCase, TestCase, override_settings,
|
||||||
|
)
|
||||||
from django.test.utils import override_script_prefix
|
from django.test.utils import override_script_prefix
|
||||||
from django.urls import (
|
from django.urls import (
|
||||||
NoReverseMatch, Resolver404, ResolverMatch, URLPattern, URLResolver,
|
NoReverseMatch, Resolver404, ResolverMatch, URLPattern, URLResolver,
|
||||||
|
@ -529,6 +531,14 @@ class ReverseLazyTest(TestCase):
|
||||||
'Some URL: /login/'
|
'Some URL: /login/'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_build_absolute_uri(self):
|
||||||
|
factory = RequestFactory()
|
||||||
|
request = factory.get('/')
|
||||||
|
self.assertEqual(
|
||||||
|
request.build_absolute_uri(reverse_lazy('some-login-page')),
|
||||||
|
'http://testserver/login/',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ReverseLazySettingsTest(AdminScriptTestCase):
|
class ReverseLazySettingsTest(AdminScriptTestCase):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue