Как отобразить видеоданные YouTube в шаблонах из поля плейлиста «Много ко многим» в Django, например, название видео и URL-адрес видео

#python #django

Вопрос:

Как я могу отобразить подробные сведения о видео, используя поле «много ко многим» в Django, каким должен быть синтаксис шаблонов и представлений для извлечения всех видео из списка воспроизведения.

—Models.py—

 from django.db import models

# Create your models here.


class Youtube_Video(models.Model):
    video_url = models.TextField(default="", blank=True, null=True)
    video_name = models.CharField(max_length=200 ,default="", blank=True, null=True)

    def __str__(self):
        return self.video_name
    

class Playlist(models.Model):
    image_Url = models.TextField()
    playlist_Name = models.CharField(max_length=200)
    playlist_Desc = models.TextField()
    slug = models.CharField(max_length=200)
    video = models.ManyToManyField(Youtube_Video, blank=True)

    def __str__(self):
        return self.playlist_Name
    
 

—Views.py—

 def videoItem(request, slug):
    playlist = Playlist.objects.filter(slug=slug).first()
    
    context = {
        'playlist': playlist,
    }

    return  render(request, "Home/videoItem.html", context)

 

—Шаблоны

 {% extends 'base.html' %}
{% block title %}Video{% endblock title %}
{% block body %}
<section id="videoItem">
    
</section>
<section>
    <h1>{{playlist.video.video_name}}</h1>
</section>
{% endblock body %}
 

Ответ №1:

вы можете использовать следующий код, чтобы получить множество взаимосвязей.


 <section>
    <h1>
        {% for vid in playlist.video.all %}
           {{ vid.video_name }}
        {% endfor %}
    </h1>
</section>
 

Ответ №2:

У Playlist экземпляра может быть много Video связанных с ним экземпляров, поэтому вы не можете напрямую получить доступ к подобному видео:

 playlist.video.video_name
 

Вы можете захватить видео, связанные с плейлистом в представлении, и включить их в контекст:

 def videoItem(request, slug):
    playlist = Playlist.objects.filter(slug=slug).first()
    videos = playlist.video.all()

    context = {
        'playlist': playlist,
        'videos': videos,
    }

    return  render(request, "Home/videoItem.html", context)
 

А затем выполните цикл videos и вставьте информацию в шаблон:

 <section>
    {% for video in videos %}
        <h1>{{ video.video_name }}</h1>
    {% endfor %}
</section>