Django:为什么我的视频不能在模板中显示? (错误 "No video with supported format and MIME type found")
Django: Why won't my video display in template? (Error "No video with supported format and MIME type found")
我有一个页面,用户可以在其中执行几项操作,并且应该显示用户上传的视频,但我收到此错误(“未找到支持格式和 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
...
该视频是 FileField
我称之为 Project
的模型。
在我看来,我获取了视频url并通过以下方式将其传递给模板:
(我省略了与此问题无关的任何代码部分)
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>
所有这些导致我提到的错误。
为了查看到底传递给模板的是什么,我将我的视频变量(在我看来)打印到控制台,并在我的模板中创建了一个 <p>
和 {{ video }}
来查看它也在那里。在两者中我都得到了: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
) 中查找视频造成的,该文件夹不存在。我认为将该代码片段添加到我的 URLconf 可能会解决这个问题,但事实并非如此。正如我所说,我发现有几个你只需要像我一样通过视频的url,但从未见过这样的事情。
您的 MEDIA_URL 设置已关闭。在你的 settings.py:
MEDIA_URL = '/media/' # need "/"
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
因为你的媒体url中没有/
,你得到的url是media/user_3/Test_project/video_file.mp4
。这只能附加到当前 url.
以下不是必须的,但最好这样做。因为我确定您在 Project 中还有其他字段要在模板中呈现。
观看次数。
def sample_view(request, project_id):
project = Project.objects.get(pk=project_id) # use project
context = {'formset': formset, 'project': project} # use project
return render(request, 'AppDir/editor.html', context}
并在模板中
<source src="{{ project.video_file.url }}" type="video/mp4">
我有一个页面,用户可以在其中执行几项操作,并且应该显示用户上传的视频,但我收到此错误(“未找到支持格式和 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
...
该视频是 FileField
我称之为 Project
的模型。
在我看来,我获取了视频url并通过以下方式将其传递给模板:
(我省略了与此问题无关的任何代码部分)
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>
所有这些导致我提到的错误。
为了查看到底传递给模板的是什么,我将我的视频变量(在我看来)打印到控制台,并在我的模板中创建了一个 <p>
和 {{ video }}
来查看它也在那里。在两者中我都得到了: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
) 中查找视频造成的,该文件夹不存在。我认为将该代码片段添加到我的 URLconf 可能会解决这个问题,但事实并非如此。正如我所说,我发现有几个你只需要像我一样通过视频的url,但从未见过这样的事情。
您的 MEDIA_URL 设置已关闭。在你的 settings.py:
MEDIA_URL = '/media/' # need "/"
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
因为你的媒体url中没有/
,你得到的url是media/user_3/Test_project/video_file.mp4
。这只能附加到当前 url.
以下不是必须的,但最好这样做。因为我确定您在 Project 中还有其他字段要在模板中呈现。
观看次数。
def sample_view(request, project_id):
project = Project.objects.get(pk=project_id) # use project
context = {'formset': formset, 'project': project} # use project
return render(request, 'AppDir/editor.html', context}
并在模板中
<source src="{{ project.video_file.url }}" type="video/mp4">