В интерфейсе администратора Django отсутствует стилизация css в продакшене

Пользовательский интерфейс работает хорошо, и все CSS стили и статические файлы обслуживаются правильно, но в интерфейсе администратора отсутствует CSS стили. Я просмотрел похожие сообщения, но в тех сообщениях у людей была проблема как с пользовательским, так и с администраторским интерфейсом. У меня проблема только с интерфейсом администратора.

Пожалуйста, посмотрите мои настройки статического файла ниже из settings.py:

STATIC_URL = '/static/'

#Location of static files
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]

STATIC_ROOT  = os.path.join(BASE_DIR, 'staticfiles')

А это моя конфигурация nginx:

server {
    listen 80;
    server_name MY_SERVER_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/MYUSERNAME/myproject;
    }

    location /media/ {
        root /home/MYUSERNAME/myproject;
    }

Я уже выполнил python manage.py collectstatic на сервере и получил следующее сообщение:

0 static files copied to '/home/MYUSERNAME/myproject/staticfiles', 255 unmodified.

После этого я перезапустил nginx, а также попробовал очистить кэш браузера, но проблема сохранилась.

Попробуйте изменить STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') на:

STATIC_ROOT  = os.path.join(BASE_DIR, 'static')

Затем повторно запустите python manage.py collectstatic. Это сработало в прошлом для некоторых людей

Попробуйте, пожалуйста, выполнить следующие шаги и сообщите мне, работает ли это или нет?

Примените следующие изменения в файле settings.py:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

Удалите следующую строку из файла settings.py:

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]

Выполните следующую команду в production:

python manage.py collectstatic

Обновите файл nginx, как показано ниже:

server {
    listen 80;
    server_name MY_SERVER_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        autoindex on;
        autoindex_exact_size off;
        root /home/MYUSERNAME/myproject;
    }

    location /media/ {
        autoindex on;
        autoindex_exact_size off;
        root /home/MYUSERNAME/myproject;
    }
}

Пояснения:

  • STATIC_ROOT - это папка, в которой будут храниться статические файлы после использования python manage.py collectstatic
  • .
  • STATICFILES_DIRS - это список папок, в которых django будет искать дополнительные статические файлы, помимо папки static каждого установленного приложения.

В данном случае нас беспокоили CSS файлы, связанные с администратором, поэтому мы используем STATIC_ROOT вместо STATICFILES_DIRS

Попробуйте передать псевдоним статическому местоположению в nginx, например, так:

location /static/ {
    alias /home/MYUSERNAME/myproject/staticfiles/
}

Не забудьте перезапустить nginx после этого.

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