Django项目部署到生产服务器后上传的图片无法显示问题求助
Django生产环境自定义上传媒体文件无法访问解决方法
核心原因:Django 自带的
static()路由辅助函数仅在DEBUG = True的开发模式下生效,生产环境关闭DEBUG后,你在urls.py中添加的媒体路由会自动失效,Django默认不会处理静态资源的分发,需要由前端Web服务器(Nginx/Apache)接管媒体文件的请求处理。
解决步骤
- 第一步:配置Web服务器的媒体路径规则
以最常用的Nginx为例,在你的站点配置文件中添加如下规则,注意替换成你自己的项目media文件夹绝对路径:
配置完成后重载Nginx配置生效:location /media/ { alias /你的项目绝对路径/media/; expires 30d; # 可选,设置媒体文件缓存时间 }nginx -s reload
如果用的是Apache,需要配置Alias规则指向media目录,同时开放目录访问权限。 - 第二步:检查模板路径渲染写法
确保模板中渲染媒体文件时,使用Django提供的url属性获取路径,不要硬编码:<!-- 正确写法 --> <img src="{{ your_model.image_field.url }}" alt="图片"> - 第三步:排查文件权限问题
如果你通过自定义逻辑上传的文件所属用户/组和Web服务器运行用户(通常为www-data)不一致,也会出现访问被拒的404错误,可执行如下命令统一media目录权限:sudo chown -R www-data:www-data /你的项目绝对路径/media/ sudo chmod -R 755 /你的项目绝对路径/media/
内容的提问来源于stack exchange,提问作者Salima
相关产品推荐
相关产品推荐

