2012-08-06 59 views
6

Tôi đã xác định bộ lọc Django tùy chỉnh của mình youtube_embed_url trong templatetags/custom_filters.py. Phải mất một url Youtube và trả về chuỗi mã nhúng cho video. Mã cho templatetags/custom_filters.py ở bên dưới:Django: chuyển đổi URL Youtube sang mã nhúng 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 

Sau đó, tôi sử dụng bộ lọc này trong trang link_page.html. Dưới đây là phần có liên quan của link_page.html:

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

Tuy nhiên, khi tôi xem các trang liên kết trong trình duyệt của tôi xem mã HTML như chuỗi:

enter image description here

Bất kỳ ý tưởng làm thế nào để làm cho kết quả của phương thức youtube_embed_url được hiểu là mã HTML chứ không phải là chuỗi? Cảm ơn trước, các bạn!

+0

Trong khi chúng tôi chờ đợi một câu trả lời thật, xin hãy xem qua http://stackoverflow.com/questions/4848611/django-rendering-a-template-variable- as-html – kush

+0

@Arman, Cảm ơn bạn đã viết mã hữu ích. –

+0

Điều này sẽ tạo ra đoạn trích Django tuyệt vời ... – nicorellius

Trả lời

11

Tốt ol 'safe filter.

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

Bạn cũng có thể sử dụng django-embed-video.

Cách sử dụng khá giống:

{% load embed_video_tags %} 

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