如何在Django中从媒体文件夹获取视频?解决404路径问题
解决Django动态渲染媒体文件404问题
1. 先让媒体文件夹在开发环境可访问
Django默认不会自动对外提供媒体文件的访问服务,得手动配置:
- 先确认
settings.py里的核心配置(没加的话补上):
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'
- 再到项目根目录的urls.py里添加媒体文件的路由规则:
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # 你的其他路由配置... path('myApp/get_media_files/', get_media_files, name="get_media_files"), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
这个配置会让开发环境下的Django自动处理/media/开头的请求,映射到本地的MEDIA_ROOT文件夹。
2. 修正前端JS的路径语法错误
你当前的视频src里多了个多余的单引号,直接导致路径格式失效:
// 错误写法:末尾多了单引号 <video src= "media/${files[i]}' " controls> // 修正后: <video src= "/media/${files[i]}" controls>
注意开头要加/,确保是根路径,避免页面嵌套层级导致相对路径出错。
3. 优化后端视图(可选但更稳妥)
可以让后端直接返回完整的媒体文件URL,前端不用手动拼接,减少出错概率:
def get_media_files(request): media_folder = os.path.join(settings.MEDIA_ROOT) files = [] for filename in os.listdir(media_folder): # 直接拼接好完整的访问URL file_url = settings.MEDIA_URL + filename files.append(file_url) return JsonResponse(files, safe=False)
之后前端直接用返回的URL即可:
<video src= "${files[i]}" controls>
4. 最后排查几个细节
- 确认媒体文件确实存在于
MEDIA_ROOT对应的本地文件夹里 - 修改配置后重启Django开发服务器,新配置才会生效
- 打开浏览器控制台的Network标签,查看视频请求的具体URL,对比本地文件路径找差异
内容的提问来源于stack exchange,提问作者Daniel N
相关产品推荐
相关产品推荐

