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