2012-08-06 28 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' }}