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

Django静态图片404问题:如何修改URL或模型显示图片?

解决方案

方法一:使用Django媒体文件系统(推荐)

这是Django处理用户上传文件的标准方案,能从根源解决路径拼接问题:

  1. 配置settings.py
    打开项目的settings.py,添加媒体文件相关配置:
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 媒体文件根目录和访问URL
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
  1. 修改models.py的存储路径
    去掉upload_to里的photo/static/前缀,让文件自动存到media目录的子文件夹中:
class SubImage(models.Model):
    image = models.ForeignKey('Image', on_delete=models.SET_NULL, null=True)
    file = models.ImageField(upload_to='subImages/', max_length=1000, null=True)

class Image(models.Model):
    title = models.CharField(max_length = 100)
    file = models.ImageField(upload_to='images/', max_length=1000, null=True)

修改后,子图片会存在media/subImages/,主图片存在media/images/,更符合Django的文件管理规范。

  1. 在urls.py中添加媒体文件路由
    让Django能正确映射媒体文件的访问路径:
from django.conf import settings
from django.conf.urls.static import static
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^works/(?P<param1>\d+)/$', views.specsView, name='specsView'),
    # 其他已有的路由...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  1. 调整模板中的图片引用
    在works.html里,使用ImageField自带的url属性获取正确的绝对路径:
<img src="{{ subImage.file.url }}">

这个属性会自动生成类似/media/subImages/blah.jpg的完整URL,浏览器会直接请求正确的地址,不会带上works/29/的前缀。

方法二:若坚持使用static目录(不推荐)

如果必须把图片放在static目录下,可以这样调整:

  1. 确认settings.py的静态文件配置
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'photo', 'static'),
]
  1. 修改模板的引用方式
    先在works.html开头加载static标签:
{% load static %}

然后用static标签生成绝对路径:

<img src="{% static subImage.file.name %}">

这会把文件的相对路径转换成/static/subImages/blah.jpg,避免和当前页面URL拼接出错。

问题根源

你之前直接用{{subImage.file}}输出的是文件的相对存储路径,而当前页面URL是/works/29/,浏览器会自动把相对路径拼接到当前URL后,形成错误的请求地址/works/29/photo/static/subImages/blah.jpg,自然返回404。

内容的提问来源于stack exchange,提问作者Mohammad Amin Eskandari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:33:06