【问题标题】:Video Upload and display on a Django Website视频上传并显示在 Django 网站上
【发布时间】:2019-09-27 03:50:45
【问题描述】:

我有一个上传视频的模型,我想在浏览器中显示相同的内容,但不知何故我无法做到。请帮助我。

我制作了一个名为 deploy 的应用,我在其中上传视频并保存。请告诉我我在哪里做错了,应该在这里做什么。我希望上传的视频应该显示在页面上,并且应该有一个下载选项。我将非常感谢您的帮助。

我的 models.py 文件:


class Video(models.Model):
    Video_Description= models.CharField(max_length=500)
    slug = models.SlugField(unique=True)
    videofile= models.FileField(upload_to='deploy/videos/%Y/%m/%d/', null=True, verbose_name="")
    timestamp   = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-timestamp']

    def get_absolute_url(self):
        return reverse ("deploy:detail", kwargs={"slug":self.slug})

    def __str__(self):
        return self.Video_Description + ": " + str(self.id)

我的views.py文件是:

class VideoDetailView(DetailView):
    queryset = Video.objects.all()



class VideoListView(ListView):

    paginate_by = 10  # <app>/<modelname>_list.html 

    def get_queryset(self, *args, **kwargs):
        qs = Video.objects.all()
        print(self.request.GET)
        query = self.request.GET.get("q", None)
        if query is not None:
            qs = qs.filter(
                Q(Video_Description__icontains=query) | Q(videofile__icontains=query))
        return qs

    def get_context_data(self, *args, **kwargs):
        context = super(VideoListView, self).get_context_data(*args, **kwargs)

        return context


video_list.html 文件是:

{% extends "base.html" %}
{% load static %}

<body>
<link rel="stylesheet" href="{% static 'deploy/cafeteria_cut.mp4' %} ">

{% block content %}

{% include "result/navbar.html" %}<br/>
{% include "result/sidebar.html" %}<br/>
{% include "result/calendar.html" %}<br/>


<div style="margin-left: 10%">
<button type="button" class="btn btn-secondary btn-lg"><a href="{% url 'deploy:create' %}" style='color:white'>Upload Video</a></button>
</div>


{% for object in object_list %} 


<div class="container" style="margin-left: 10%; align-items: center;">

<h2>

</br>

<a href="{{ object.get_absolute_url }}">

{{ object.Video_Description }}

</a>

</br> 

</h2> 

</br>

<a href="" style="align-items: center;"> 

{{ object.videofile}} 

</a> 

</br> 

<br><br>
<video width='400' controls>
<source src="{% static 'deploy/youtubeVideo_cut20.mp4' %}" type='video/mp4'>
Your browser does not support the video tag.
</video>
<br><br>

 {% empty %}
            {% if request.GET.q %}
            <p style="padding-left: 20%; font-size: 70px">No Result Found </p>
            {% else %}
            <p style="padding-left: 20%; font-size: 70px"> No Result Yet.

            {% endif %}

{% endfor %} 


 {% endblock content %}

非常抱歉,我没有在我的 video_list.html 文件中提及一件非常重要的事情:

<br><br>
<video width='400' controls>
<source src="{% static 'deploy/youtubeVideo_cut20.mp4' %}" type='video/mp4'>
Your browser does not support the video tag.
</video>
<br><br>

我正在浏览器上显示视频。

【问题讨论】:

  • '但不知何故我不能'?你能详细说明你不能做什么吗?您面临的问题是什么?
  • @Sanip 我的意思是上传的视频没有显示在浏览器上。
  • 尝试使用src="{{ object.videofile.url }}" 而不是src="{% static 'deploy/object.videofile' %}"
  • 在您的浏览器中右键单击 -> 检查元素 -> 检查视频的来源,路径可能以某种方式损坏。你可以从这里开始往上走
  • @hansTheFranz 它确实说“加载资源失败:服务器响应状态为 404(未找到)”,但我不明白,我试过 这是正确的方法,但没有帮助。

标签: django django-models django-templates django-views


【解决方案1】:

确保您已维护媒体文件设置。在您的 settings.py 文件中:

MEDIA_URL = '/media/'
MEDIA_ROOT= os.path.join(os.path.dirname(BASE_DIR), "media_root")

然后在你的主urls.py:

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

然后在您的 html 文件中进行更改:

<source src="{% static 'deploy/object.videofile' %}" type='video/mp4'> //here

您正在尝试将视频文件作为静态文件提取。这不是正确的做法。

尝试将视频的src中对象的视频文件的url传递为:

<br><br>
<video width='400' controls>
<source src="{{ object.videofile.url }}" type='video/mp4'>
Your browser does not support the video tag.
</video>
<br><br>

【讨论】:

  • 很遗憾地通知我已经尝试过了,但没有帮助。
  • 您是否尝试过检查 html 页面中显示的源文件路径?
  • 哪个视图呈现video_list.html 模板?你是否在DetailView 中传递Video.objects.all()VideoDetailView 中也没有指定型号
  • 请检查我所做的编辑,如果它可能有助于更好地理解问题。这就是我的做法: class VideoCreateView(CreateView): form_class= VideoModelForm template_name = 'deploy/create_view.html' success_url = reverse_lazy("deploy:list")
  • 您说没有在 VideoDetailView 中指定模型。你能解释一下它有什么需要吗?我刚刚开始研究 Django,所以我会感谢您的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多