Проблема статических файлов при обновлении Django до 4.2 в админке
В настоящее время я использую django 3.2 и хотел бы вскоре перейти на версию 4.2. Это происходит в локальной среде и с помощью python manage.py collectstatic
. Однако проблема возникает, когда я пытаюсь развернуть это в среде разработки.
Новые статические файлы администратора не загружаются, из-за чего страница администратора django выглядит неработоспособной. В частности, в django 4.2 появился статический файл dark_theme.css
, который возвращает ошибку 404 при просмотре сетевой вкладки браузера. В моем локальном окружении этот файл возвращает 200 ok.
Это наиболее похожая тема на мою проблему, которую я смог найти на официальном форуме django, однако здесь нет четкого решения проблемы (возможно, потому что существует множество причин, по которым она может возникнуть)
Я использую nginx для сервера. У нас есть CI-процесс, который запускается collectstatic
, затем копирует результаты в контейнер docker, и у меня есть такая конфигурация nginx для получения статических файлов:
location /static/ {
autoindex on;
alias /usr/share/nginx/html/static/;
}
В настройках django у меня такая конфигурация:
STATIC_ROOT = BASE_DIR / "ui/build/static"
STATIC_URL = "/static/"
Так как статические файлы генерируются на STATIC_ROOT
, то контейнер докера корректно копирует их на /usr/share/nginx/html/
.
Я попробовал проделать тот же процесс, но с флагом --clear
для команды collectstatic
, но безуспешно. Я также попробовал обновиться до версии django 4.2.0, так как некоторые люди сообщали, что эта версия работает, но опять же безрезультатно. И, конечно, я попробовал обновить кэш браузера
Не уверен, что это еще может быть, похоже, что статические файлы есть (в частности, dark_theme.css
, кажется, существует в нужном месте), но при получении файлов из браузера я получаю 404.
Любые мысли или другие вещи, которые я могу попробовать/проверить, будут оценены по достоинству, спасибо.
Это довольно распространенная проблема, которая может быть вызвана множеством причин, вот в чем заключалась моя проблема:
Ранее вот как собирался докер-контейнер:
poetry run python manage.py collectstatic
npm install
npm run build
docker build ...
Проблема заключалась в том, что сборка npm перезаписывала статические файлы, поскольку они оба находились в маршруте /build/static
, решением было поменять их местами. Только с этим проблема осталась, также нужно было добавить --clear
в collectstatic
.
npm install
npm run build
poetry run python manage.py collectstatic --clear
docker build ...