使用Django在模板中显示YouTube视频

时间:2011-09-10 07:24:52

标签: django templates youtube

我正在尝试在模型中存储YouTube链接列表,然后将其作为列表传递到使用YouTube嵌入代码呈现的模板。一切似乎都运行正常,变量传递正常,但视频没有显示。 YouTube iframe代码只是空白,而YouTube嵌入代码的复制/粘贴显示正常。

模型中的代码:

from django.db import models

class Video(models.Model):
    link = models.URLField()

    def __str__(self):
        return self.link                            

视图中的代码:

def index(request):
    full_list = Video.objects.all()
    return render_to_response('index.html', {'full_list': full_list})

模板中的代码:

<h1>YouTube list</h1>
{% if full_list %}
    <ul>
    {% for video in full_list %}
        <li>
<!-- link passed to embed code, this shows up as blank -->
<iframe width="560" height="345" src="{{ video.link }}?rel=0" frameborder="0" allowfullscreen></iframe>

<!-- YouTube embed link copy/pasted as is -->
<iframe width="560" height="345" src="http://www.youtube.com/embed/vLmNvYTTWXM?rel=0" frameborder="0" allowfullscreen></iframe>
        </li>
    {% endfor %}
    </ul>
{% else %}
    <p>No videos available</p>
{% endif %}

    

浏览器的屏幕截图:https://img.skitch.com/20110910-t78bm288mxh6nmyjmcbxyjr37n.png

我猜测首先渲染模板,然后添加变量,因此甚至不会调用YouTube的服务器。这是一个正确的假设,如果是这样,我该怎么做呢?

3 个答案:

答案 0 :(得分:2)

我的代码是正确的。 你会告诉我们结果HTML代码吗? 唯一可能是错误的是模型中缺少__unicode__方法。 您不应该使用__str__而是使用__unicode__

答案 1 :(得分:2)

我写了一个模板标签,它完全符合上面的要求。

https://gist.github.com/chhantyal/5396911

答案 2 :(得分:0)

您可以使用此库使您的生活更轻松:

https://github.com/jazzband/django-embed-video

最简单的嵌入视频:

models.py

from django.db import models
from embed_video.fields import EmbedVideoField

class Item(models.Model):
    video = EmbedVideoField()  # same like models.URLField()

模板

{% load embed_video_tags %}

The video tag:
{% video item.video as my_video %}
  URL: {{ my_video.url }}
  Thumbnail: {{ my_video.thumbnail }}
  Backend: {{ my_video.backend }}

  {% video my_video "large" %}
{% endvideo %}

Or embed shortcut:
{% video my_video '800x600' %}