Django отображение видео из модели
У меня есть модель, содержащая видеофайлы, загруженные в папку media/videos. Когда я нахожусь на странице администратора, я могу видеть видео и воспроизводить его. Теперь я пытаюсь отобразить его в шаблоне, но он не позволяет мне это сделать.
Вот моя модель:
class CheckList(models.Model):
choices = (('', 'Select'), ('Good', 'Good'), ('Not Good', 'Not Good'))
fuel_choices = (('', 'Select'), ('Full', 'Full'), ('3 Quarters', '3 Quarters'), ('Half Tank', 'Half Tank'), ('Almost Empty', 'Almost Empty'))
cargo_choices = (('', 'Select'), ('Cargo Secured', 'Cargo Secured'), ('Cargo Not Secured', 'Cargo Not Secured'), ('No Cargo', 'No Cargo'))
vehicle = models.ForeignKey(Trucks, on_delete=models.CASCADE, blank=True, null=True)
driver = models.ForeignKey(User, on_delete=models.CASCADE)
breaks = models.CharField(null=False, choices=choices, max_length=50, default='Select')
wipers = models.CharField(null=False, choices=choices, max_length=50, default='Select')
wiper_fluid = models.CharField(null=False, choices=choices, max_length=50, default='Select')
cargo = models.CharField(null=False, choices=cargo_choices, max_length=50, default='Select')
cargo_straps = models.CharField(null=False, choices=choices, max_length=50, default='Select')
tires = models.CharField(null=False, choices=choices, max_length=50, default='Select')
oil = models.CharField(null=False, choices=choices, max_length=50, default='Select')
miles = models.IntegerField(null=False, default='0')
gas = models.CharField(null=False, choices=fuel_choices, max_length=100, default='Select')
seatbelt = models.CharField(null=False, choices=choices, max_length=100, default='Good')
date_created = models.DateTimeField(auto_created=True)
# Need video of vehicle
video = models.FileField(upload_to='videos/')
def __str__(self):
return self.vehicle.nickname
Мое представление, которое обрабатывает рендеринг страницы:
@login_required()
def report_detail(request, pk):
checklist = CheckList.objects.get(pk=pk)
context = {'checklist': checklist}
return render(request, 'driver/report_detail.html', context)
А шаблон, на который я пытаюсь загрузить видео:
{% extends 'user_area/base.html' %}
{% block title %}
Fleet Manager
{% endblock title %}
{% block content %}
{% include 'user_area/components/weather.html' %}
{% if user.is_authenticated %}
<div style="margin-top: 30px; margin-left: 50px">
<h4>Vehicle: {{ checklist.vehicle}}</h4>
Driver: {{checklist.driver}} <br>
Breaks Status: {{checklist.breaks}} <br>
Wipers Status: {{checklist.wipers}} <br>
Wiper Fluid: {{checklist.wiper_fluid}} <br>
Cargo Status: {{checklist.cargo}} <br>
Cargo Straps Status: {{checklist.cargo_straps}} <br>
Tires Status: {{checklist.tires}} <br>
Oil Status: {{checklist.oil}} <br>
Miles Out: {{checklist.miles}} <br>
Gas: {{checklist.gas}} <br>
Seatbelt Status: {{checklist.seatbelt}} <br>
Vehicle Taken out on: {{checklist.date_created}} <br>
<video width="320" height="240" controls>
<source src="{% media 'videos/' %}{{checklist.video}}" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
{% else %}
<a href="{% url 'user_area:home' %}">Please login</a>
{% endif %}
{% endblock %}
Теперь мой вопрос: если видео "сохранено" в checklist.video, и оно находится в моей папке media, как мне указать шаблону на него, чтобы он его отобразил?
Вы должны использовать url видео в шаблонах, используя checklist.video.url
:
<source src="{{ checklist.video.url }}" type="video/mp4">