feat: add support for local asset URLs in S3 storage backends

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-04-29 08:12:57 +02:00
parent 84d8a0e3b6
commit 30f260c9bf
2 changed files with 24 additions and 4 deletions
+22 -1
View File
@@ -1,8 +1,19 @@
from __future__ import annotations
import os
from django.utils.encoding import iri_to_uri
from storages.backends.s3 import S3ManifestStaticStorage, S3Storage
def _use_local_asset_urls() -> bool:
return os.getenv('S3_USE_LOCAL_URLS', '').strip().lower() in {'1', 'true', 'yes', 'on'}
def _local_asset_url(prefix: str, name: str) -> str:
return iri_to_uri(f'/{prefix}/{name.lstrip("/")}')
class StaticStorage(S3ManifestStaticStorage):
location = 'static'
default_acl = 'public-read'
@@ -12,6 +23,11 @@ class StaticStorage(S3ManifestStaticStorage):
'CacheControl': 'public, max-age=31536000, immutable',
}
def url(self, name: str) -> str:
if _use_local_asset_urls():
return _local_asset_url('static', name)
return super().url(name)
class MediaStorage(S3Storage):
location = 'media'
@@ -20,4 +36,9 @@ class MediaStorage(S3Storage):
file_overwrite = False
object_parameters = {
'CacheControl': 'public, max-age=604800',
}
}
def url(self, name: str) -> str:
if _use_local_asset_urls():
return _local_asset_url('media', name)
return super().url(name)