カスタム Django フィルター youtube_embed_url を templatetags/custom_filters.py で定義しました。Youtube の URL を受け取り、ビデオの埋め込みコードである文字列を返します。templatetags/custom_filters.py のコードは次のとおりです。
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 コードが文字列として表示されます。
youtube_embed_url メソッドの結果を文字列ではなく HTML コードとして解釈する方法はありますか? よろしくお願いします!