DEBUG=False 后静态文件 404 怎么解决?静态/媒体文件怎么配?
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
原因:DEBUG=False 时 Django 不再自动提供静态文件服务(这是设计,静态文件该交给 nginx/CDN)。404 是因为没人"喂"这些文件给浏览器。
三步解决:
第 1 步:配置 settings.py
STATIC_URL = "/static/" # 访问 URL 前缀
STATIC_ROOT = BASE_DIR / "staticfiles" # collectstatic 收集目标
# 开发时额外放静态文件的目录
STATICFILES_DIRS = [BASE_DIR / "static"]
MEDIA_URL = "/media/" # 用户上传文件
MEDIA_ROOT = BASE_DIR / "media"
第 2 步:收集静态文件
python manage.py collectstatic # 把各 app 的 static 收集到 STATIC_ROOT
第 3 步:让 Web 服务器托管(二选一)
- nginx 托管(推荐):
location /static/ { alias /path/to/staticfiles/; }
location /media/ { alias /path/to/media/; }
- 纯 Python 方案:装
whitenoise,在MIDDLEWARE加一行whitenoise.middleware.WhiteNoiseMiddleware,静态文件自动由 Django 进程托管(小流量项目够用)。
开发环境(DEBUG=True)临时方案:
# urls.py 末尾加(仅开发)
from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
常见坑:
1. 只配了 STATIC_URL 没配 STATIC_ROOT → collectstatic 报错。
2. 生产忘记执行 collectstatic → 新文件 404。
3. 模板里静态文件要用 {% load static %} + {% static 'css/style.css' %},不要写死路径。
回复
0 条回复