mirror of https://github.com/django/django.git
Fixed #29022 -- Fixed handling protocol-relative URLs in ManifestStaticFilesStorage when STATIC_URL is set to /.
This commit is contained in:
parent
ef2434f850
commit
107aa76bcf
|
@ -221,7 +221,7 @@ class HashedFilesMixin:
|
|||
url = matches["url"]
|
||||
|
||||
# Ignore absolute/protocol-relative and data-uri URLs.
|
||||
if re.match(r"^[a-z]+:", url):
|
||||
if re.match(r"^[a-z]+:", url) or url.startswith("//"):
|
||||
return matched
|
||||
|
||||
# Ignore absolute URLs that don't point to a static file (dynamic
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
body {
|
||||
background: url("//foobar");
|
||||
}
|
|
@ -22,7 +22,7 @@ from .settings import TEST_ROOT
|
|||
|
||||
def hashed_file_path(test, path):
|
||||
fullpath = test.render_template(test.static_template_snippet(path))
|
||||
return fullpath.replace(settings.STATIC_URL, "")
|
||||
return fullpath.removeprefix(settings.STATIC_URL)
|
||||
|
||||
|
||||
class TestHashedFiles:
|
||||
|
@ -560,6 +560,32 @@ class TestCollectionManifestStorage(TestHashedFiles, CollectionTestCase):
|
|||
self.assertEqual(manifest_content, {"dummy.txt": "dummy.txt"})
|
||||
|
||||
|
||||
@override_settings(
|
||||
STATIC_URL="/",
|
||||
STORAGES={
|
||||
**settings.STORAGES,
|
||||
STATICFILES_STORAGE_ALIAS: {
|
||||
"BACKEND": "django.contrib.staticfiles.storage.ManifestStaticFilesStorage",
|
||||
},
|
||||
},
|
||||
)
|
||||
class TestCollectionManifestStorageStaticUrlSlash(CollectionTestCase):
|
||||
run_collectstatic_in_setUp = False
|
||||
hashed_file_path = hashed_file_path
|
||||
|
||||
def test_protocol_relative_url_ignored(self):
|
||||
with override_settings(
|
||||
STATICFILES_DIRS=[os.path.join(TEST_ROOT, "project", "static_url_slash")],
|
||||
STATICFILES_FINDERS=["django.contrib.staticfiles.finders.FileSystemFinder"],
|
||||
):
|
||||
self.run_collectstatic()
|
||||
relpath = self.hashed_file_path("ignored.css")
|
||||
self.assertEqual(relpath, "ignored.61707f5f4942.css")
|
||||
with storage.staticfiles_storage.open(relpath) as relfile:
|
||||
content = relfile.read()
|
||||
self.assertIn(b"//foobar", content)
|
||||
|
||||
|
||||
@override_settings(
|
||||
STORAGES={
|
||||
**settings.STORAGES,
|
||||
|
|
Loading…
Reference in New Issue