2012-08-06 3 views
6

Ich habe meinen benutzerdefinierten Django-Filter youtube_embed_url in templatetags/custom_filters.py definiert. Es nimmt eine Youtube-URL und gibt die Zeichenfolge zurück, die den Code für das Video einbetten soll. Der Code für templatetags/custom_filters.py unter:Django: Youtube-URL in HTML-Code umwandeln

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 

Dann habe ich diese Filter in link_page.html Webseite. Hier ist der relevante Teil der link_page.html:

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

Allerdings, wenn ich den Link Seite in Browser anzeigen sehe ich den HTML-Code als Zeichenfolge:

enter image description here

Irgendeine Idee, wie man das Ergebnis der youtube_embed_url-Methode als HTML-Code interpretieren, nicht als String? Vielen Dank im Voraus, Leute!

+0

Während wir für eine wirkliche Antwort warten, nehmen Sie bitte einen Blick auf http://stackoverflow.com/questions/4848611/django-rendering-a-template-variable- as-html – kush

+0

@Arman, Danke für den nützlichen Code. –

+0

Das wäre ein cooler Django-Snippet ... – nicorellius

Antwort

11

Guten alten safe filter.

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

Sie können auch django-embed-video verwenden.

Verwendung ist ganz ähnlich:

{% load embed_video_tags %} 

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