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

Django模板图片无法显示,浏览器报404错误求助

Django模板图片无法显示的解决方法

核心问题定位

你的配置里存在两个关键冲突点:

  • ImageField的upload_to='static/assets'会把上传的图片存到MEDIA_ROOT/static/assets/目录下,但你手动把图片放在了media应用的static/assets文件夹里,两者路径完全不匹配。
  • 浏览器显示的/static/assets/xxx.jpg是Django根据upload_to生成的URL,但这个路径被路由到静态文件服务,而你的图片并不在项目或应用的static目录的对应位置,同时media路由只处理/media/开头的URL,所以访问这个路径必然报404。

具体修复步骤

1. 修正ImageField的upload_to配置

打开models.py,把article_image字段的upload_to改为不包含static的路径,比如:

class MediaModule(models.Model):
    article_image = models.ImageField(upload_to='assets/')

这样上传的图片会被存到MEDIA_ROOT/assets/目录下,生成的URL会是/media/assets/xxx.jpg,和你配置的MEDIA_URL完全匹配。

2. 调整图片存放位置

把media应用/static/assets/image.jpg移动到项目目录/media/assets/image.jpg(如果MEDIA_ROOT对应的media文件夹下没有assets目录,手动创建即可)。

3. 验证模板中的URL引用

模板里保持{{ article.article_image.url }}即可,现在它会正确输出/media/assets/image.jpg,这个路径会被你配置的media路由正常处理。

4. 确认urls.py的media路由配置

确保项目根urls.py里的media路由配置正确:

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

urlpatterns = [
    # 你的其他路由配置
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

额外注意事项

  • 不要把用户上传的媒体文件放到static文件夹里,static文件夹是用来存放项目开发阶段的静态资源(如CSS、JS、默认图标等),用户上传的动态文件应该放在MEDIA_ROOT对应的目录下,由media路由专门处理。
  • DEBUG模式下Django会自动处理media文件的服务,生产环境需要配置反向代理(如Nginx)来直接处理media文件的请求,避免通过Django服务转发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:43:33