用Django和html5标签播放视频

时间:2014-01-06 15:30:50

标签: django html5 video html5-video

我正在尝试使用带有html5视频标签的django播放视频,但却无法播放 主要问题是服务器无法获取video文件 我收到了这个错误:

[06/Jan/2014 23:52:07] "GET absolute_path_of_media/sample.mp4 HTTP/1.1" 404 2422

并在检查元素中:

get error

在这里,我会告诉你我的代码 模板/ videoplay.html:

{% extends "app/base.html" %}
{% block contents %}
<video name='demo' controls autoplay width='50%' height='40%'>
<source src="{{media}}/sample.mp4" type="video/mp4"></source>
</video>
{% endblock %}

views.py:

def index(request):
    return render(request, "app/videoplay.html", {'media': MEDIA_ROOT}) 

我从settings.py导入了MEDIA_ROOT,它是媒体目录的绝对路径。

开发环境:

browser: chrome 
django:1.6.1
python:2.7

静态和媒体目录的关系:

mysite/
      static/
            sample.mp4
      media/
            sample.mp4
      templates/
            ....
      views.py
      ....

3 个答案:

答案 0 :(得分:6)

您在文件URL的开头缺少斜杠,并且您不需要将MEDIA_ROOT传递到上下文中,使用您在设置文件中设置的{{STATIC_URL}}模板变量。

为了澄清以下评论,您的MEDIA_ROOT设置是django将存储媒体文件(用户上传)的位置。 STATIC_ROOT是django寻找静态文件(你的js / css / images等)的地方。

模板中使用STATIC_URLMEDIA_URL设置。它们将被设置为类似STATIC_URL = "/static/"MEDIA_URL = "/media/"的内容,并且它们会被django传递给模板,所以当你这样做时:

<img src="{{ STATIC_URL }}sample.jpg" />

<source src="{{ MEDIA_URL }}sample.mp4" type="video/mp4"></source>

它会将{{ STATIC_URL}}替换为"/static/",因此您最终会使用"/static/sample.jpg"作为django用于从STATIC_ROOT获取文件的src网址。

答案 1 :(得分:3)

你可以试试这个:

{% load staticfiles %}
<!DOCTYPE html>
<html>
<body>

<video width="530" height="440" controls autoplay>
  <source src="{% static "mov_bbb.mp4" %}" type="video/mp4"> </source>
</video>
</body>
</html>

setting.py

STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"), )

view.py

from django.views.generic.base import TemplateView


class HomeView(TemplateView):

    template_name = 'home.html'

urls.py

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.HomeView.as_view(), name='home'),
]

静态文件:

static/
            mov_bbb.mp4

答案 2 :(得分:1)

您不希望目录的绝对路径。您需要实际投放媒体的网址,可能类似于"/static/sample.mp4"(或者您已配置STATIC_URL