2012-08-06 80 views
6

我在templatetags/custom_filters.py中定义了我自定义的Django过滤器youtube_embed_url。它需要一个Youtube网址并返回嵌入视频代码的字符串。对于templatetags/custom_filters.py的代码如下:Django:将YouTube网址转换为HTML嵌入代码

from django import template 
from django.conf import settings 
register = template.Library() 
import re 

@register.filter(name='youtube_embed_url') 
# converts youtube URL into embed HTML 
# value is url 
def youtube_embed_url(value): 
    match = re.search(r'^(http|https)\:\/\/www\.youtube\.com\/watch\?v\=(\w*)(\&(.*))?$', value) 
    if match: 
     embed_url = 'http://www.youtube.com/embed/%s' %(match.group(2)) 
     res = "<iframe width=\"560\" height=\"315\" src=\"%s\" frameborder=\"0\" allowfullscreen></iframe>" %(embed_url) 
     return res 
    return '' 

youtube_embed_url.is_safe = True 

然后我link_page.html页面使用此过滤器。这里是link_page.html的相关部分:

<div> 
{{ link.url|youtube_embed_url }} 
</div> 

然而,当我在浏览器中查看链接页面我看到的HTML代码作为字符串:

enter image description here

任何想法如何将youtube_embed_url方法的结果解释为HTML代码,而不是字符串?在此先感谢,伙计们!

+0

在我们等待一个真正的答案,请看看http://stackoverflow.com/questions/4848611/django-rendering-a-template-variable- as-html – kush 2012-08-06 23:06:48

+0

@Arman,感谢您的有用代码。 – 2013-07-22 21:09:29

+0

这将使一个很酷的Django片段... – nicorellius 2014-11-07 21:01:31

回答

11

Good ol'safe filter

{{ link.url|youtube_embed_url|safe }} 
3

您还可以使用django-embed-video

用法颇为相似:

{% load embed_video_tags %} 

{{ link.url|embed:'560x315' }}