Django网站下载文件时出现FileNotFound错误求助
Django 文件下载404问题排查与解决
核心原因:媒体文件路由未正确配置
静态文件路由和媒体文件路由是独立的,你仅配置了静态文件路由,但Django不会自动处理媒体文件的访问请求,这是导致404错误的关键。
具体修复步骤:
在项目根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对应的本地目录。验证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用/)。检查FileField的上传路径配置
你的CsvDFile模型中csv_file字段未指定upload_to参数,默认会上传到MEDIA_ROOT根目录。若文件存放在子目录,需补充配置:class CsvDFile(models.Model): csv_file = models.FileField(upload_to='') # 空字符串表示直接存在MEDIA_ROOT根目录,有子目录可写如'csv_files/' # 其他字段保持不变确保文件实际存储路径与
MEDIA_ROOT配置匹配。区分开发与生产环境配置
上述static()路由仅在开发环境(DEBUG=True)生效。若为生产环境,需配置Nginx、Apache等Web服务器直接处理媒体文件请求,不能依赖Django路由。
额外验证项:
- 确认
settings.py中DEBUG设为True,若DEBUG=False,Django不会处理静态/媒体文件请求。 - 检查文件权限:确保Django进程拥有读取
uploads目录及文件的权限。
内容的提问来源于stack exchange,提问作者Hosam Hashem
相关产品推荐
相关产品推荐

