Django STATIC_URL с полным доменом разбивает статические активы локально

При локальной работе над проектом Django, который использует статические файлы и бэкенд статических файлов по умолчанию, я сталкиваюсь с проблемой, когда хочу получить полные абсолютные ссылки на статические файлы вместо только пути.

Мои настройки:

DEBUG = True
BASE_DIR = Path(__file__).resolve().parent.parent
INSTALLED_APPS = ["django.contrib.staticfiles", ...]

STATIC_ROOT = BASE_DIR / "static_root"
STATIC_URL = "/static/"
MEDIA_ROOT = BASE_DIR / "media_root"
MEDIA_URL = "/media/"

STATICFILES_DIRS = (BASE_DIR / "static",)

STATICFILES_FINDERS = (
    "django.contrib.staticfiles.finders.FileSystemFinder",
    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
)

Все работает, CSS админки загружается, картинки работают и т.д. Но когда я получаю путь к файлу с таким кодом:

from django.contrib.staticfiles.storage import staticfiles_storage
static_path = staticfiles_storage.url("path_to_folder/some_file.jpg")

В результате получается относительный путь: /static/path_to_folder/some_file.jpg. Это проблема, когда эти url используются из моего внешнего фронтенда: теперь он должен добавлять базовый url бэкенда ко всем статическим активам. Но если я хочу развернуть статические активы на S3, например, в продакшене, то я не должен предварять эти пути доменом бэкенда

Итак, я попытался изменить настройку STATIC_URL на http://localhost:8000/static/. Таким образом, полный url передается во фронтенд, но я мог бы легко изменить эту настройку в бэкенде в продакшене.

И вот тут-то и возникает проблема: когда я меняю STATIC_URL на http://localhost:8000/static/, ни один из моих статических файлов больше не работает, я просто получаю 404. Страница администратора также не работает из-за этого.

Короче говоря, как я могу использовать абсолютный STATIC_URL в режиме локальной разработки с DEBUG=True?

Нашел решение здесь: https://docs.djangoproject.com/en/4.1/ref/contrib/staticfiles/#django.contrib.staticfiles.views.serve.

Просто добавьте это в конец файла urls.py:

from django.conf import settings
from django.contrib.staticfiles import views
from django.urls import re_path

if settings.DEBUG:
    urlpatterns += [
        re_path(r'^static/(?P<path>.*)$', views.serve),
    ]

Тогда статические файлы снова будут работать даже с абсолютным URL в качестве параметра STATIC_URL.

Вернуться на верх