Video Upload and display on a Django Website

痴心易碎 提交于 2021-02-19 07:58:07

问题


I have a model where I upload a video, i want to display the same in the browser but somehow I am not able to. Kindly help me.

I made an app with the name deploy, where I am uploading the video and saving it. Kindly tell me where I am doing wrong and what should be done here. I want the video which was uploaded should be displayed on the page and there should be a option for download as well. I shall be extremely thankful for the help.

My models.py file:


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)

My views.py file is:

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 file is:

{% 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 %}

I am extremely sorry i failed to mention a very important thing, in my video_list.html file, when I do:

<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>

I am getting video displayed on the browser.


回答1:


Make sure you have maintained the media file settings. In your settings.py file:

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

Then in your main urls.py:

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

Then make changes in your html file:

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

You are trying to fetch the video file as an static file. This is not the correct approach.

Try passing the url of the object's video file in the src of the video as:

<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>


来源:https://stackoverflow.com/questions/56057223/video-upload-and-display-on-a-django-website

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!