Django从SQLite展示图片时文件名变更致404错误求助
Django图片显示404问题排查与解决
核心问题分析
你遇到的Not Found: /media/clothes_images/1_fSqDIIb.png错误,本质是Django自动重命名上传图片后,文件未正确保存到指定路径,或是静态文件服务未正确映射到实际存储位置。
分步排查与解决
1. 确认文件实际存储状态
直接前往本地MEDIA_ROOT对应的目录(项目根目录下的media/clothes_images/)检查:
- 是否存在
1_fSqDIIb.png文件? - 如果文件不存在,排查上传逻辑:表单是否添加了
enctype="multipart/form-data"属性,视图处理时是否正确获取了request.FILES数据。
2. 简化图片URL调用
你自定义的image_url方法无需额外编写,Django的ImageField自带url属性,直接在模板中使用即可:
<img src="{{ cloth.profile_picture.url }}" alt="商品图片">
若需处理图片为空的场景,可添加判断:
{% if cloth.profile_picture %} <img src="{{ cloth.profile_picture.url }}" alt="商品图片"> {% else %} <img src="/static/default-img.png" alt="默认图片"> {% endif %}
3. 验证MEDIA配置正确性
检查settings.py配置
确保配置完整且路径正确:
import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Django 3.0+版本也可使用pathlib写法:
from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent MEDIA_URL = '/media/' MEDIA_ROOT = BASE_DIR / 'media'
检查urls.py配置
确保项目根urls.py中正确添加媒体文件服务映射,代码需放在urlpatterns之后:
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # 你的其他路由配置 ] if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
注意:该配置仅在DEBUG模式下生效,生产环境需依赖Nginx/Apache等服务器处理媒体文件。
4. 检查文件权限(Linux/macOS)
若使用类Unix系统,需确保media目录及文件有可读权限:
chmod -R 755 media/
5. 清除浏览器缓存
浏览器可能缓存旧的404响应,按Ctrl+F5强制刷新页面,或使用隐私模式测试。
内容的提问来源于stack exchange,提问作者madmaneman
相关产品推荐
相关产品推荐

