我的项目使用的是前后端分离的结构,前端用的Vue,后台用的django。
把django的admin站点管理页面部署到nginx上后,发现样式都没了。
从网上查了下,大多方法是修改nginx.conf,加上location /static/的信息,并且把django的settings里加上STATIC_ROOTS。
以上步骤参考
Django+Nginx+uWSGI部署到服务器admin后台样式消失
我照着做了之后发现,我原本的网站打不开了,console显示找不到js和css文件。
前端部署到服务器是 vue打包为dist 然后部署上去的,访问static时会被我新设置的location /static/ 拦截掉,于是就404了。
相当于前端vue的static和我的admin所需的static冲突了。
遍地寻找解决方法后看到了下面这篇文章:
部署在apache上的django之admin管理页面样式丢失解决方案
有了相同的解决思路。
通过第一篇文章的python manage.py collectstatic
操作之后,我已经有了属于admin的样式,把这个文件夹通过cp命令复制到了dist的static文件夹中。
cp -r /root/dongdong2/Dongdong2/static/admin /root/dongdong2/dist/static/admin
之后修改nginx.conf里面的配置为
location /static/ {
alias /root/dongdong2/dist/static/;
}
⚠️是alias 不是 root
【区别】
root响应的路径:配置的路径(root指向的路径)+完整访问路径(location的路径)+静态文件
alias响应的路径:配置路径+静态文件(去除location中配置的路径)一般情况下,在location /中配置root,在location /other中配置alias
修改django的settings.py为
STATIC_ROOT = '/root/dongdong2/dist/static/'
STATIC_URL = '/static/'
STATICFILES_DIR = [
os.path.join(BASE_DIR,'static'),
]
重启nginx
nginx -s reload
之后重启uwsgi
fuser -k 9091/tcp
uwsgi --ini uwsgi.ini
此时admin的也有样式了,自己本身的网站样式也都成功加载了!