【问题标题】:Trying to display a list of youtube videos into django template with django-embed-video尝试使用 django-embed-video 将 youtube 视频列表显示到 django 模板中
【发布时间】:2018-11-12 07:53:27
【问题描述】:

我正在尝试使用 django-embed-video 将 youtube 视频列表嵌入到我的 django 应用程序中,随着时间的推移会添加更多视频。根据他们的文档,我做了以下事情:

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 标签非常不确定。浏览器仅在呈现 videos.html 时将 youtube 链接显示为字符串。如何显示视频?

【问题讨论】:

    标签: python django video youtube embed


    【解决方案1】:

    感谢您的快速回答 raratiru!它让我想到了研究 d​​jango-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 %}
    

    【讨论】:

    【解决方案2】:

    您需要根据models.py获取EmbedVideoField(),即video。因此,循环应该是这样的:

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

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 2020-02-01
      • 2011-09-20
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 1970-01-01
      • 2017-10-05
      相关资源
      最近更新 更多