【发布时间】:2021-03-25 14:32:24
【问题描述】:
我有一个页面,用户可以在其中执行多项操作,并且应该显示用户上传的视频,但我收到此错误(“未找到支持格式和 MIME 类型的视频”),尽管 — 我认为 —我正在做的正是我在几个地方在网上找到的。
这些是我在settings.py 中的MEDIA_ROOT 和MEDIA_URL:
MEDIA_URL = 'media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
在media 目录中,我为每个用户创建了子目录——如果它们不存在的话——当用户创建项目并上传视频时。在用户子目录中,用户创建的每个项目都有一个目录。在这些文件中,存在几个文件,包括视频。所以,对于我现在正在做的测试,结构如下:
|— media
|— user_3
|— Test_project
|— video_file.mp4
|— irrelevant_file
|— irrelevant _file
...
视频是我称为Project的模型中的FileField。
在我看来,我获取视频网址并通过以下方式将其传递给模板:
(我省略了与此问题无关的任何代码部分)
def sample_view(request, project_id):
video = Project.objects.get(pk=project_id).video_file.url
# ... some irrelevant code
# The formset has always worked. I am only showing it here just in case it's relevant as to how I'm passing the context to the template.
context = {'formset': formset, 'video': video}
return render(request, 'AppDir/editor.html', context}
在我的模板中:
<video width="320" height="240" controls>
<source src="{{ video }}" type="video/mp4">
</video>
所有这些都会导致我提到的错误。
为了查看传递给模板的确切内容,我将我的视频变量(在我看来)打印到控制台,并在我的模板中创建了一个带有{{ video }} 的<p> 以便在那里看到它。在这两个我得到:media/user_3/Test_project/video_file.mp4
这在我的浏览器检查器中正确显示为src 属性。
我也尝试使用Project.objects.get(pk=project_id)(而不是Project.objects.get(pk=project_id).video_file.url)进行查询,然后在我的模板<source src="{{ video.video_file.url }}" type="video/mp4"> 中使用它,但我得到了同样的错误。
我觉得有趣并且我认为可能是导致问题的原因(我不知道如何解决)是,在控制台中,当我转到该页面时,我看到:
Not found: editor/206/media/user_3/Test_project/video_file.mp4
... some other things
Not found: /media
editor/206 是编辑器页面的 url,206 是我用来提供所有内容的项目 pk。
根据文档所说的 here,然后我将其添加到我的 URLconf:
from django.conf import settings
from django.conf.urls.static import static
url_patterns = [
# ... some patterns
path('editor/<int:project_id>/', views.sample_view, name='editor'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_URL)
我还是遇到了同样的错误。
所以,我猜这是由于浏览器试图在该文件夹 (editor/206/media/user_3/Test_project/video_file.mp4) 中查找不存在的视频所致。我认为将代码 sn-p 添加到我的 URLconf 可能会解决这个问题,但事实并非如此。正如我所说,我在几个中发现你只需要像我一样传递视频的 url,但从未见过这样的东西。
【问题讨论】: