summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/http/request.py3
-rw-r--r--tests/urlpatterns_reverse/tests.py12
2 files changed, 14 insertions, 1 deletions
diff --git a/django/http/request.py b/django/http/request.py
index 5c567b9c46..a0bdf49312 100644
--- a/django/http/request.py
+++ b/django/http/request.py
@@ -191,6 +191,9 @@ class HttpRequest:
# Make it an absolute url (but schemeless and domainless) for the
# edge case that the path starts with '//'.
location = '//%s' % self.get_full_path()
+ else:
+ # Coerce lazy locations.
+ location = str(location)
bits = urlsplit(location)
if not (bits.scheme and bits.netloc):
# Handle the simple, most common case. If the location is absolute
diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py
index d26923ab9d..94c2d40fe8 100644
--- a/tests/urlpatterns_reverse/tests.py
+++ b/tests/urlpatterns_reverse/tests.py
@@ -13,7 +13,9 @@ from django.http import (
HttpRequest, HttpResponsePermanentRedirect, HttpResponseRedirect,
)
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.urls import (
NoReverseMatch, Resolver404, ResolverMatch, URLPattern, URLResolver,
@@ -529,6 +531,14 @@ class ReverseLazyTest(TestCase):
'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):
"""