Django Admin页面CSS缺失问题求助(Nginx+Unicorn环境)
我之前也碰到过一模一样的情况——其他页面静态资源都正常加载,唯独Admin的CSS完全没样式,明明请求返回200但页面就是光秃秃的。结合你的环境和已做的操作,咱们一步步排查解决:
1. 先检查Nginx的静态资源路由配置
Unicorn本身不处理静态文件,全靠Nginx转发。你大概率是漏了针对Admin静态资源的正确路由,或者路径配置有误。
打开你的Nginx站点配置文件(通常在/etc/nginx/sites-available/目录下),确认是否有类似这样的配置:
location /static/ { alias /绝对路径/到你的/STATIC_ROOT/; # 这里必须和Django settings里的STATIC_ROOT完全一致 }
因为collectstatic会把django.contrib.admin的静态文件自动收集到STATIC_ROOT/admin/目录下,只要上面的/static/路由配置正确,访问/static/admin/css/...这类URL时,Nginx会直接返回对应的静态文件。
验证小技巧:直接在浏览器访问Admin CSS的完整URL(比如http://你的域名/static/admin/css/base.css),查看页面内容是不是正常的CSS代码。如果显示空白或者非CSS内容,那肯定是Nginx的路径配置错了。
2. 确认collectstatic真的收集了Admin的静态文件
虽然你说已经执行了命令,但还是要手动确认下目标目录的内容。执行以下命令:
ls -la /你的STATIC_ROOT路径/admin/css/
如果这个目录是空的,说明collectstatic没收集到Admin的资源。这时候要检查:
INSTALLED_APPS里确实有django.contrib.admin(再核对下拼写,别写错)- 重新执行一次收集命令,确保没有跳过确认:
python manage.py collectstatic --noinput
3. 检查静态文件的权限
Nginx进程需要有读取静态文件的权限,如果权限不对,可能会出现请求返回200但实际内容为空的情况。执行以下命令修复权限:
# 给Nginx所属用户(通常是www-data)赋予读取权限 chown -R www-data:www-data /你的STATIC_ROOT路径/ chmod -R 755 /你的STATIC_ROOT路径/
4. 核对Django的静态资源配置
打开settings.py,确保以下配置正确:
STATIC_URL = '/static/' STATIC_ROOT = '/绝对路径/到你的/静态资源目录/' # 和Nginx配置里的alias完全匹配 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 这个必须存在,负责静态资源的收集和管理 # 你的其他应用 ]
特别注意django.contrib.staticfiles不能漏掉,否则collectstatic不会处理Admin的静态资源。
最后:重启服务生效
不管改了哪个配置,都要重启Nginx和Unicorn让配置生效:
sudo systemctl restart nginx sudo systemctl restart unicorn # 或者你启动Unicorn的自定义命令
我当时就是把Nginx的alias路径写成了项目里的开发用static目录,而不是collectstatic收集后的生产目录,改过来重启Nginx就搞定了。你按上面的步骤排查,应该很快能解决问题。
内容的提问来源于stack exchange,提问作者S. Dior

