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

如何配置Django以在APP路由下正确访问项目根目录的媒体文件夹资源

如何配置Django以在APP路由下正确访问项目根目录的媒体文件夹资源

嘿,我一眼就瞅出问题出在哪了!你碰到的404错误,核心原因是模板里引用媒体文件的方式不对,导致浏览器从当前APP路由路径下去找文件,而不是咱们配置好的/media/路径。

问题根源拆解

你在模板里写的是 <img src="{{ hrac.fotka }}" />,这里的{{ hrac.fotka }}输出的只是数据库里存的相对路径pic/hraci/download_6BVC8qn.jpeg。当你在/soupiska/这个APP路由页面时,浏览器会把这个路径解析成相对当前页面的路径——也就是/soupiska/pic/hraci/download_6BVC8qn.jpeg,但你的媒体文件明明存在项目根目录的media/文件夹下,这不就找不到了嘛!

一步步解决问题

1. 模板里用正确的媒体文件URL

把模板里的图片引用改成下面这样:

<th><img src="{{ hrac.fotka.url }}" /></th>

{{ hrac.fotka.url }}会自动拼接你配置的MEDIA_URL,最终输出完整的正确路径:/media/pic/hraci/download_6BVC8qn.jpeg。这样不管你在哪个APP路由下,浏览器都会直奔正确的/media/路径找文件。

2. 确认模型字段配置(可选但关键)

确保你的模型里的fotka字段是ImageField或FileField,并且设置了正确的upload_to参数,比如:

from django.db import models

class Hrac(models.Model):
    # 其他字段...
    fotka = models.ImageField(upload_to='pic/hraci/', blank=True, null=True)

这样上传的文件会自动存到MEDIA_ROOT/pic/hraci/目录下,和数据库里的路径完全对应。

3. 优化MEDIA配置(可选)

你的settings.py和urls.py配置其实已经没问题了,但可以把MEDIA_ROOT的写法换成Django推荐的pathlib格式,更简洁:

# settings.py
from pathlib import Path

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

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'  # 替代os.path.join的写法

另外要提醒下:urls.py里的静态媒体服务配置只适合开发环境,生产环境记得用Nginx或Apache来托管媒体文件哦。

4. 顺手修复favicon的小问题

模板里的<link rel="icon" href="./favicon.ico" />也是相对路径,同样会在APP路由下找不到。建议把favicon放到静态文件目录(比如static/),然后用Django的静态文件标签引用:

{% load static %}
<link rel="icon" href="{% static 'favicon.ico' %}" type="image/x-icon" />

验证效果

改完模板后刷新页面,浏览器应该会请求/media/pic/hraci/download_6BVC8qn.jpeg,这个路径正好对应你media/文件夹里的文件,404错误就彻底消失啦!

备注:内容来源于stack exchange,提问作者Libor P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:43:01