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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:27:39