DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

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

下载推广海报

圈内讨论推广海报

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

回复

0 条回复
暂无回复。