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

Django遍历Model实例加载ImageField图片出现404错误求助

解决Django ImageField图片404问题

你的问题核心是混淆了用户上传的媒体文件(ImageField)和项目静态文件的处理逻辑,Django对这两类文件的存储、访问路径是分开管理的,以下是具体修复步骤:

1. 配置项目根目录的settings.py

在项目根目录的settings.py(而非todo应用下的settings)中添加媒体文件的存储路径与URL前缀:

# 媒体文件存储根目录,项目根会自动生成media文件夹
MEDIA_ROOT = BASE_DIR / 'media'
# 媒体文件访问的URL前缀
MEDIA_URL = '/media/'

2. 修改项目根目录的urls.py

在项目根的urls.py中添加媒体文件的URL映射(而非todo应用的urls.py):

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    # 引入todo应用的路由配置
    path('todo/', include('todo.urls')),
]

# 仅DEBUG模式下提供媒体文件的静态服务
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

3. 清理todo应用的urls.py

删除todo应用urls.py中多余的STATIC相关配置(那是给静态文件用的,和上传图片无关),修改后如下:

from django.urls import path
from .views import GoodsList

urlpatterns = [
    path('goods_list/', GoodsList.as_view()),
]

4. 模板代码无需调整

你当前goods_list.html里的{{ good.pic.url }}写法是正确的,配置完成后它会自动生成/media/todo/goods_images/image_2023-04-03_224219080.png这类合法路径,图片即可正常加载。

补充说明

  • ImageField的upload_to='todo/goods_images'会让上传图片存储在media/todo/goods_images/目录下,和静态文件目录(static)完全隔离。
  • 生产环境不能用static()函数处理媒体文件,需依靠Nginx、Apache等Web服务器托管,但开发环境下DEBUG模式可直接用此方式调试。

内容的提问来源于stack exchange,提问作者KA RL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:55:12