【问题标题】:Django: Why won't my video display in template? (Error "No video with supported format and MIME type found")Django:为什么我的视频不会在模板中显示? (错误“找不到支持格式和 MIME 类型的视频”)
【发布时间】:2021-03-25 14:32:24
【问题描述】:

我有一个页面,用户可以在其中执行多项操作,并且应该显示用户上传的视频,但我收到此错误(“未找到支持格式和 MIME 类型的视频”),尽管 — 我认为 —我正在做的正是我在几个地方在网上找到的。

这些是我在settings.py 中的MEDIA_ROOTMEDIA_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 }}&lt;p&gt; 以便在那里看到它。在这两个我得到:media/user_3/Test_project/video_file.mp4

这在我的浏览器检查器中正确显示为src 属性。

我也尝试使用Project.objects.get(pk=project_id)(而不是Project.objects.get(pk=project_id).video_file.url)进行查询,然后在我的模板&lt;source src="{{ video.video_file.url }}" type="video/mp4"&gt; 中使用它,但我得到了同样的错误。

我觉得有趣并且我认为可能是导致问题的原因(我不知道如何解决)是,在控制台中,当我转到该页面时,我看到:

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,但从未见过这样的东西。

【问题讨论】:

    标签: python django video


    【解决方案1】:

    您的 MEDIA_URL 设置已关闭。在你的 settings.py 中:

    MEDIA_URL = '/media/' # need "/"
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    

    因为您的媒体网址中没有/,所以您得到的网址是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">
    

    【讨论】:

    • 初学者错误。它现在可以与/ 一起使用。我想问您,当您说“这只能附加到当前网址”时,您的意思是这就是找不到editor/206/media/user_3/Test_project/video_file.mp4 的真正原因吗?因为是media/ 而不是/media/?也许这有点明显,但我仍然认为自己是初学者并希望得到一些确认。
    • 我的意思是这就是 django 认为您的视频在 editor/206/meida... 中的原因。你的视频在/media....。所以,django 找不到它。
    猜你喜欢
    • 2015-08-08
    • 2014-03-03
    • 1970-01-01
    • 2016-06-12
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多