Django中HTML页面加载图片遇目录变更404错误求助
解决Django媒体文件路径变更后的404问题
嗨,作为Django新手遇到这种路径问题很正常,咱们一步步来搞定它:
1. 先修正settings.py里的媒体文件配置
Django处理用户上传/存储的媒体文件,全靠MEDIA_ROOT和MEDIA_URL这两个配置项撑着。现在你把图片挪到了admin/public/media目录,得让这俩配置跟上新路径:
假设你的项目根目录是这样的:
你的项目名/ admin/ public/ media/ freelancer.jpg 你的项目名/ settings.py urls.py ...
那就在settings.py里改成这样:
import os # 获取项目根目录的绝对路径 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 媒体文件在本地的存储路径,对应你新的文件夹 MEDIA_ROOT = os.path.join(BASE_DIR, 'admin', 'public', 'media') # 访问媒体文件的URL前缀,要和你模板里写的路径开头一致 MEDIA_URL = '/admin/public/media/'
2. 给项目URL配置加媒体文件服务路由(开发环境)
开发阶段Django不会自动帮你处理媒体文件的HTTP请求,得在项目根目录的urls.py里加一段配置:
from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), # 这里是你其他的路由配置... ] # 只有在开发模式(DEBUG=True)下才添加这个,生产环境别这么用! if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
3. 调整模板里的图片引用
配置好之后,模板里的路径可以更规范地写,不用硬编码前缀:
<img src="{{ MEDIA_URL }}{{ cat.image_name }}" alt="#" height="350">
另外提一句,如果你的cat模型里用的是ImageField(而不是存文件名的CharField),直接用{{ cat.image.url }}会更靠谱,Django会自动帮你拼接正确的路径:
<img src="{{ cat.image.url }}" alt="#" height="350">
最后再检查两个小细节
- 确认
admin/public/media这个文件夹的权限没问题,Django运行的用户能读取里面的文件 - 数据库里存的
image_name确实是freelancer.jpg这种纯文件名,没有多余的路径前缀
按这些步骤调整完,应该就能正常显示图片啦!
内容的提问来源于stack exchange,提问作者aditya gupta
相关产品推荐
相关产品推荐

