2012-08-06 7 views
6

Definí mi filtro de Django personalizado youtube_embed_url en templatetags/custom_filters.py. Toma una url de Youtube y devuelve la cadena que contiene el código para el video. El código para templatetags/custom_filters.py es el siguiente:Django: convertir el URL de Youtube al código de inserción de 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 

Luego uso de este filtro en la página link_page.html. Aquí está la parte pertinente de link_page.html:

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

Sin embargo, cuando veo la página de enlace en el navegador que veo el código HTML como la cadena:

enter image description here

alguna idea de cómo hacer que el resultado del método youtube_embed_url se interprete como el código HTML, no como una cadena? Gracias de antemano, chicos!

+0

A la espera de una respuesta real, por favor, eche un vistazo a http://stackoverflow.com/questions/4848611/django-rendering-a-template-variable- as-html – kush

+0

@Arman, gracias por el código útil. –

+0

Esto sería un buen fragmento de Django ... – nicorellius

Respuesta

11

Good ol 'safe filter.

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

También puedes usar django-embed-video.

El uso es bastante similar:

{% load embed_video_tags %} 

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