用过django的内置服务器127.0.0.1:8000都知道,如果debug=False的时候那么django就不会自己去寻找静态文件了,
那么这个时候就需要自己去设置静态文件的路径,为此,我踩过不少坑,这篇文章能够很好的解决这个问题
我部署的环境是centos7.6 django uwsgi nginx 详情请参考此博客下部署文章
在nginx中设置好静态文件路径,用绝对路径指向静态文件static即可,media同理
location /static{
alias /data/wwwroot/project/static;
}
正文开始
如果你的项目部署后所有的静态文件都出现了404,那么你应该检查一下,你的setting中是否有设置
因为线上环境是不可能开启debug的,总结就是开启debug关了之后就不会django就不会自己找静态文件了
所以,只需要自己设置好路由,让django去按照指定的路由去找静态文件就完美的解决了
DEBUG=False
# STATICFILES_DIRS=[os.path.join(BASE_DIR,’static’)] 这句是需要注释的
STATIC_ROOT=os.path.join(BASE_DIR,’static’) #用于处理静态文件
MEDIA_ROOT=os.path.join(BASE_DIR,’media’) # 用于处理上传的文件
setting中做好了这三部之后
开始在url.py中设置
首先导入
from django.conf.static import serve
from django.conf import settings
from django.urls import re_path # 因为需要用到正则匹配所以导入它
接着在路由中添加
urlpatterns=[
re_path(‘^stiaic/(?P<path>.*)’,serve,{‘document_root’:settings.STATIC_ROOT}), # 用于处理static里的文件
re_path(‘^media/(?P<path>.*)’,serve,{‘document_root’:settings.MEDIA_ROOT}), # 用于处理上传的文件
]
然后在执行静态文件收集
python manage.py collectstatic # 收集全部静态文件到STATIC_URL定义的路径内
然后重启你的uwsgi和nginx看看效果吧
这样就可以解决关了debug后静态文件丢失的问题,踩了n多坑之后总结出来的经验,分享给你们!
祝你们好运。(如果还没有成功,多试几次)