You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目media文件夹图片突然无法加载返回404错误

故障根因

核心问题是MEDIA_URL配置缺少前导斜杠,属于相对路径配置缺陷,之前数月能正常运行完全是路径解析的巧合:

  • 当前配置MEDIA_URL = 'media/'是相对路径,当用户访问站点根路径/时,浏览器会把页面中引用的media/xxx.jpg解析为/media/xxx.jpg,刚好能匹配你配置的媒体静态路由,所以功能表现正常。
  • 当视图中触发redirect跳转到非根层级的页面(比如/article/detail/5/这类多级路径页面)时,浏览器会基于当前页面的URL层级拼接所有相对路径资源:media/xxx.jpg会被解析为/article/detail/5/media/xxx.jpg,完全匹配不到媒体文件路由,所有图片自然全部返回404。
修复方案
  1. 修正settings.py中的媒体路径配置,给MEDIA_URL加上前导斜杠,改为站点绝对路径:
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, "media")
    
  2. 调整媒体路由的挂载位置:不要把urlpatterns += static(...)写在单个应用的urls.py中,移到项目根urls.py的所有路由配置末尾,避免因为app路由被include到子路径前缀下,导致媒体路由被挂载到错误的子路径下失效。
    根urls.py参考配置:
    from django.conf import settings
    from django.conf.urls.static import static
    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        # 其余业务路由、app引入配置
    ]
    
    # 仅DEBUG模式下由Django接管媒体文件服务,生产环境需用Nginx等web服务器直接托管media目录
    if settings.DEBUG:
        urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    
补充注意点

如果修复后仍有偶发404,检查redirect的写法:

  • 不要直接写redirect('media/xxx.jpg')这类相对路径跳转,跳转媒体资源时要写绝对路径redirect('/media/xxx.jpg'),或者通过reverse解析路由名生成标准路径,避免相对路径解析错位。

内容的提问来源于stack exchange,提问作者itsdiy0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:27:23