Попытка отобразить список видео с YouTube в шаблоне django с помощью django-embed-video - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь встроить список видео на YouTube, в которое со временем будет добавлено больше видео, в мое приложение django, используя django-embed-video.Следуя их документации, я сделал следующее:

models.py

from embed_video.fields import EmbedVideoField

class Youtube(models.Model):
    video = EmbedVideoField()
    slug = models.SlugField(max_length=200, db_index=True, unique=True)

    def __str__(self):
        return self.video

admin.py

from .models import Youtube
from embed_video.admin import AdminVideoMixin

class YoutubeAdmin(AdminVideoMixin, admin.ModelAdmin):
    list_display = ('video', 'slug')

admin.site.register(Youtube, YoutubeAdmin)

views.py

from .models import Youtube

def display_video(request):
    videos = Youtube.objects.all()
    context = {'videos': videos}
    return render (request, 'scienceblog/post/videos.html', context)

videos.html

{% extends "base.html" %}
{% load embed_video_tags %}
{% video item.video 'small' %}

{% block content %}

{% if videos %}

    {% for v in videos %}
    {{ v }}
    {% endfor %}

    {% else %}
    <p>No videos yet</p>

{% endif %}
{% endblock %}

Все отлично работает на сайте администратора.Ссылки на YouTube добавлены и видео отображаются.Однако я очень не уверен насчет тегов HTML.Браузер отображает ссылки на YouTube только в виде строки при отображении videos.html.Как я могу показать видео?

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Спасибо за быстрый ответ raratiru!Это натолкнуло меня на мысль взглянуть на код самого приложения django-embed-video.Я немного повозился с ним, и теперь он работает так, как я хотел, чтобы он работал.Соответствующий код:

videos.html

{% load embed_video_tags %}
{% for v in videos %}
    {% video v.video as my %}
        <iframe width="{{ 480 }}" height="{{ 320 }}" src="{{ my.url }}" 
        frameborder="0" allowfullscreen></iframe>
    {% endvideo %}
{% endfor %}
0 голосов
/ 02 июня 2018

Вам необходимо приобрести EmbedVideoField(), что составляет video в соответствии с models.py.Следовательно, цикл должен читать что-то вроде:

{% extends "base.html" %}
{% load embed_video_tags %}
{% video item.video 'small' %}

{% block content %}

{% if videos %}

    {% for v in videos %}
    {{ v.video }}
    {% endfor %}

    {% else %}
    <p>No videos yet</p>

{% endif %}
{% endblock %}

Возможно, что у EmbedVideoField() есть больше атрибутов, к которым необходимо получить доступ, вы должны проверить соответствующие документы.Например, если код встраивания хранится в EmbedVideoField().embed_code, вы можете получить его следующим образом:

{% for v in videos %}
{{ v.video.embed_code }}
{% endfor %}
...