django + uwsgi 启动的一个小项目,用python manage.py runserver 0.0.0.0:80调试服务是可以正常展示页面的静态文件的,当我切换到用uwsgi启动服务的时候,就出现了静态文件找不到404的情况。
排查第一步:
仔细排查一下自己的settings.py 文件里的 STATIC_ROOT、STATICFILES_DIRS、STATIC_URL 这3个变量设置的是否正确。
1.在开发模式下(Debug=True)时,使用的是STATICFILES_DIRS和app下的static中的静态文件,Django 有默认的对STATIC_URL路由能自动找到放在里面的静态文件。
2.在部署模式(Debug=False)时,使用的是STATIC_ROOT中的静态文件,此时则没有了默认的对STATIC_URL的路由,需要自己在project的urls.py中写一个,将STATIC_URL开头的请求转发到STATIC_ROOT中进行查找。
如下(参考):
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]
排查第二步:
检查一下urls.py文件里是否有
from django.conf.urls import include, url
from django.contrib import admin
from django.conf.urls.static import static
from xxx import settings
urlpatterns = [
url(r'^admin/', admin.site.urls),
......
]
# 这行很重要
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
排查第三步:
检查一下settings.py文件里的 DEBUG值,必要的情况下可以设为:
DEBUG = True