Django模板无法显示上传视频 报错无支持格式与MIME类型
问题根因与修复方案
1. 修正 MEDIA_URL 配置,解决相对路径拼接问题
- 你当前的
MEDIA_URL = 'media/'缺少开头的斜杠,会导致Django基于FileField生成的文件URL是相对路径格式 - 浏览器解析相对路径时,会基于当前页面的URL路径做拼接:当前编辑器页面路径是
/editor/206/,拿到media/user_3/Test_project/video_file.mp4这类相对路径后,最终会拼接出请求地址/editor/206/media/user_3/Test_project/video_file.mp4,这和服务端日志里的404记录完全对应 - 正确配置要求
MEDIA_URL以斜杠开头、结尾,保证生成的文件URL是站点根路径下的绝对路径:
# settings.py 修正后的配置 MEDIA_URL = '/media/' # 必须补充开头的斜杠 MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
配置修正后,模板中FileField生成的视频路径会变为 /media/user_3/Test_project/video_file.mp4,浏览器会直接从站点根路径发起请求,不会再触发错误的相对路径拼接。
2. 修正URLconf中媒体路由的参数错误
- 你当前编写的静态媒体映射存在核心参数传值错误:
static()方法的document_root参数要求传入本地文件系统的绝对路径,你错将URL路径settings.MEDIA_URL传入,就算路由匹配成功,Django也会因为找不到本地对应路径的文件返回404,这也是日志中出现Not found: /media的直接原因 - 开发环境下正确的媒体路由映射写法如下:
# 项目根目录的urls.py from django.conf import settings from django.conf.urls.static import static from django.urls import path urlpatterns = [ # 其他原有路由规则 path('editor/<int:project_id>/', views.sample_view, name='editor'), ] # 仅在本地开发模式下追加媒体文件路由映射 if settings.DEBUG: # 注意document_root必须传入MEDIA_ROOT(本地文件路径),不是MEDIA_URL urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
3. 完成配置后的验证步骤
- 直接在浏览器地址栏输入视频的完整绝对路径(例如
http://127.0.0.1:8000/media/user_3/Test_project/video_file.mp4),确认能直接加载、无404错误 - 回到编辑器页面,打开浏览器开发者工具的网络面板,确认视频请求的状态码为200,请求路径没有被错误拼接
- 确认视频文件本身编码为浏览器兼容的H.264格式,避免因视频编码不支持触发“No video with supported format and MIME type found”的报错
内容的提问来源于stack exchange,提问作者TheSprinter
相关产品推荐
相关产品推荐

