我写了块标记,当我尝试在模板中导致它时出现错误:
无效的块标记:'endyoutube'
我的标签
from django import template
register = template.Library()
@register.tag
def youtube(parser, token):
link = parser.parse(('endyoutube', ))
iframe = """<iframe width="640" height="510" src="%s" frameborder="0"
allowfullscreen></iframe>""" % link
return YoutubeNode(iframe)
class YoutubeNode(template.Node):
def __init__(self, iframe):
self.iframe = iframe
def render(self, context):
video = self.iframe.render(context)
return video
模板
{% load customtags %}
{% youtube %}
http://www.youtube.com/watch?v=yZt1qXnOOqU
{% endyoutube %}
我的标签有什么问题?我怎么能解决它?
答案 0 :(得分:0)
我明白了。第一个错误 - 我没有使用delete_first_token(),它正在删除令牌中的结束标记,这是错误的原因。第二个错误 - 这是不可能的,将解析后的数据插入到函数中的字符串中,因为它不是字符串,而是类'django.template.debug.DebugNodeList'。此对象要求render()方法是在Node类实例中引起的字符串。最后一个 - 用于嵌入和监视的youtube链接是不同的。
可行标签
class YoutubeNode(template.Node):
def __init__(self, parsed_link):
self.parsed_link = parsed_link
def render(self, context):
del_it = re.compile('&feature=related')
replace_it = re.compile('watch\?v=')
link = self.parsed_link.render(context)
link = del_it.sub('', link)
link = replace_it.sub('embed/', link)
video = """<p><iframe width="550" height="438" src="%s"
frameborder="0" allowfullscreen></iframe></p>""" % link
return video
@register.tag
def youtube(parser, token):
parsed_link = parser.parse(('endyoutube', ))
# first token it's closing tag. delete_first_token just delete it - del self.tokens[0];)
parser.delete_first_token()
return YoutubeNode(parsed_link)