Django POST请求保存图片成功但页面访问404无法显示
Django 媒体文件存储成功但访问404问题解决方案
常见成因
- 开发模式下未配置媒体资源路由映射:Django默认不会自动公开MEDIA目录下的资源,仅配置
MEDIA_URL和MEDIA_ROOT不会自动生效,缺少路由规则会直接返回404。 - 访问路径与
MEDIA_URL配置不匹配:如果实际访问的资源路径前缀和settings中定义的MEDIA_URL不一致,无法命中资源路由。 - 生产环境未配置静态资源托管服务:Django本身不支持生产环境下处理静态/媒体资源,未配置Nginx等反向代理托管MEDIA目录时会出现404。
- 目录权限不足:运行Web服务的进程没有MEDIA目录的读取权限,即使文件存在也无法正常返回。
解决方法
开发环境(Debug = True 场景)
在项目根路由文件urls.py中添加媒体资源路由映射,配置示例如下:
from django.conf import settings from django.conf.urls.static import static # 原有路由配置 urlpatterns = [ # path('admin/', admin.site.urls), # 其他业务路由 ] # 新增媒体资源路由 urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
配置完成后重启Django服务即可正常访问/media/路径下的资源。
生产环境(Debug = False 场景)
按照官方建议使用Nginx等反向代理服务托管媒体资源,Nginx配置参考如下:
server { # 其他原有配置 location /media/ { alias /你的项目根路径/media/; # 替换为settings中MEDIA_ROOT对应的绝对路径 expires 30d; add_header Cache-Control "public, no-transform"; } }
配置完成后重启Nginx服务即可。
内容的提问来源于stack exchange,提问作者Jason Javier
相关产品推荐
相关产品推荐

