Коротко — проблема не в admin или unfold, а в том, что ваши статические файлы (включая файлы админки Django) не оказываются в той папке, которую веб‑сервер отдаёт по URL /static/. Что с этим делать — пошагово.
1) Понять текущую структуру и что отдаёт веб‑сервер
- Откройте страницу админки в браузере, посмотрите в разметке URL CSS/JS (обычно /static/admin/...). Попробуйте открыть такой URL напрямую — возвращает 404 или 200?
- Посмотрите, какая файловая папка у вас реально содержит собранные статические файлы (есть ли в ней папка admin, css, js и т.д.). У вас есть две папки:
- /.../rope_site/static/
- /.../rope_site/staticfiles/
Нужно понять, какая из них ожидается веб‑сервером как корень для /static/.
2) Правильная логика настроек Django
- STATICFILES_DIRS — папки, где Django ищет исходные статические ресурсы вашего проекта (обычно ваш проектный static/).
- STATIC_ROOT — папка, куда команда collectstatic собирает все статические файлы (включая django.contrib.admin) для последующей отдачи веб‑сервером.
- STATIC_URL — URL префикс (обычно /static/).
Типичный вариант (рекомендуемый):
- STATIC_URL = '/static/'
- STATICFILES_DIRS = ['/www/.../rope_site/static/'] # ваши исходники
- STATIC_ROOT = '/www/.../rope_site/staticfiles/' # папка, которую должен отдавать веб‑сервер
3) Выполните collectstatic
- На сервере выполните:
python manage.py collectstatic
Это скопирует файлы из STATICFILES_DIRS и из приложений (admin и другие) в STATIC_ROOT.
4) Настройте веб‑сервер (или панель хостинга) так, чтобы он раздавал /static/ из STATIC_ROOT
- Apache (пример):
Alias /static/ /www/.../rope_site/staticfiles/
<Directory /www/.../rope_site/staticfiles/>
Require all granted
</Directory>
- Nginx (пример):
location /static/ { alias /www/.../rope_site/staticfiles/; }
- Если у хостера есть интерфейс «Статические файлы / Aliases», создайте правило: URL /static/ → /www/.../rope_site/staticfiles/
5) Проверки и права
- Убедитесь, что файлы в STATIC_ROOT действительно содержат папку admin (например staticfiles/admin/...).
- Проверьте права: веб‑сервер должен иметь чтение (обычно 755 для каталогов, 644 для файлов).
- Перезагрузите веб‑сервер / примените изменения в панели.
6) Альтернативы и временные решения
- Если вы не можете настраивать веб‑сервер, можно использовать WhiteNoise (включить в WSGI/ASGI) — он будет отдавать статические файлы из STATIC_ROOT сам (подходит для простых хостингов).
- Можно создать символьную ссылку, если хостер ожидает другую папку: ln -s /www/.../rope_site/staticfiles /www/.../rope_site/static (или наоборот), но это костыль — лучше корректно настроить STATIC_ROOT и веб‑сервер.
7) MEDIA (аналогично)
- MEDIA_URL = '/media/' и MEDIA_ROOT указывают, где лежат загруженные пользователями файлы. Веб‑сервер тоже должен отдавать /media/ из этой папки.
Резюме конкретно для вашего случая
- Самый быстрый способ: поменяйте местами значения (чтобы STATIC_ROOT указывал на ту папку, которую вы хотите отдавать), например:
STATICFILES_DIRS = ['/www/.../rope_site/static/']
STATIC_ROOT = '/www/.../rope_site/staticfiles/'
- Выполните python manage.py collectstatic
- В панели hoster.by (или в конфиге Apache/Nginx) укажите, чтобы URL /static/ указывал на /www/.../rope_site/staticfiles/
- Проверьте права и убедитесь, что в staticfiles/ есть admin CSS/JS
Если после этого админка всё ещё не подгружает CSS — пришлите:
- Пример URL, по которому в HTML ищется CSS (строку из <link href="...">),
- Результат запроса к этому URL (статус 200/404) и список файлов в /www/.../rope_site/staticfiles/ (ls -la),
и я подсскажу точную правку.