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

Django网站下载文件时出现FileNotFound错误求助

Django 文件下载404问题排查与解决

核心原因:媒体文件路由未正确配置

静态文件路由和媒体文件路由是独立的,你仅配置了静态文件路由,但Django不会自动处理媒体文件的访问请求,这是导致404错误的关键。

具体修复步骤:

  1. 在项目根urls.py中添加媒体文件路由
    导入settings和static模块,补充针对MEDIA_URL的路由规则:

    from django.conf import settings
    from django.conf.urls.static import static
    
    urlpatterns = [
        # 保留你已有的其他路由
        path('admin/', admin.site.urls),
        # ...
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    该配置会让Django在开发环境中,将MEDIA_URL开头的请求映射到MEDIA_ROOT对应的本地目录。

  2. 验证MEDIA_ROOT路径准确性
    确认MEDIA_ROOT确实指向文件所在目录,可通过Django Shell验证:

    python manage.py shell
    >>> from django.conf import settings
    >>> print(settings.MEDIA_ROOT)
    

    输出路径需与存放test.csv的myapp/uploads目录完全一致(注意系统路径分隔符差异:Windows用\,Linux/macOS用/)。

  3. 检查FileField的上传路径配置
    你的CsvDFile模型中csv_file字段未指定upload_to参数,默认会上传到MEDIA_ROOT根目录。若文件存放在子目录,需补充配置:

    class CsvDFile(models.Model):
        csv_file = models.FileField(upload_to='')  # 空字符串表示直接存在MEDIA_ROOT根目录,有子目录可写如'csv_files/'
        # 其他字段保持不变
    

    确保文件实际存储路径与MEDIA_ROOT配置匹配。

  4. 区分开发与生产环境配置
    上述static()路由仅在开发环境(DEBUG=True)生效。若为生产环境,需配置Nginx、Apache等Web服务器直接处理媒体文件请求,不能依赖Django路由。

额外验证项:

  • 确认settings.py中DEBUG设为True,若DEBUG=False,Django不会处理静态/媒体文件请求。
  • 检查文件权限:确保Django进程拥有读取uploads目录及文件的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:51:34