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

Django中饮品图片访问404问题求助

Django ImageField 404 问题排查与解决

核心问题分析

你的配置存在三个关键错误,导致媒体文件无法被正确访问:

  1. MEDIA_URL 和 MEDIA_ROOT 配置错误:空的MEDIA_URL和BASE_DIR作为MEDIA_ROOT,让Django无法正确映射媒体文件的访问路径和存储位置
  2. ImageField upload_to 参数冗余:包含static/前缀,导致文件存储路径和Django的媒体服务逻辑冲突
  3. 模板中图片URL引用可能不符合规范:手动拼接路径会忽略Django的媒体URL生成规则

逐步修正配置

1. 修正 Settings.py 中的媒体文件配置

将媒体相关配置改为以下内容,确保MEDIA_URL和MEDIA_ROOT正确分离:

import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

# 静态文件配置(保留原有正确部分)
STATIC_URL = 'static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

# 媒体文件配置(重点修正)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  • MEDIA_URL:定义媒体文件的访问前缀,图片访问URL会自动生成为/media/images/drinkPhotos/xxx.jpeg
  • MEDIA_ROOT:指定媒体文件在服务器上的实际存储目录,对应项目根目录下的media文件夹

2. 调整 Models.py 中的 ImageField 路径

去掉upload_to中的static/media/前缀,只保留相对MEDIA_ROOT的路径:

photo = models.ImageField(upload_to="images/drinkPhotos", blank=True)

上传的图片会被存储到MEDIA_ROOT/images/drinkPhotos(即项目根目录下的media/images/drinkPhotos),和MEDIA_URL的映射逻辑完全匹配。

3. 确认 urls.py 配置(当前已正确,无需修改)

你的urls.py中已经添加了DEBUG模式下的媒体文件服务路由,确保保留:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path("", HomeView.as_view(), name="home"),
    path('<slug:slug>/', StoreView.as_view(), name="stores"),
    path("<slug:slug>/<slug:drinksSlug>/", DrinksView.as_view(), name="drinks"),
    path("<int:account_id>/select_drinks/", views.select_drink, name="select")
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

4. 修正模板中的图片引用

在drinks.html中,使用Django自动生成的图片URL,不要手动拼接路径:

<img src="{{ drinks.photo.url }}" alt="{{ drinks.drink_name }}">

{{ drinks.photo.url }}会根据MEDIA_URL自动生成正确的访问路径,避免手动拼接导致的路径错误。


后续操作

  • 若之前已通过admin上传过图片,需将原存储路径static/media/images/drinkPhotos下的文件移动到新的media/images/drinkPhotos目录,或重新上传图片
  • 重启Django开发服务器,确保配置生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:24:54