RSS
菜单

DEBUG=False 后静态文件 404 怎么解决?静态/媒体文件怎么配?

原因: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' %},不要写死路径。

下载推广海报

圈内讨论推广海报

《DEBUG=False 后静态文件 404 怎么解决?静态/媒体文件怎么配?》完整推广海报
一起交流

全部回复 0

分享经验,让问题更进一步

讨论,从你的观点开始

还没有回复,欢迎补充经验或分享不同的思路。