Я понял.Первая ошибка - я не использовал 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)