Вы можете попытаться выполнить синтаксический анализ до закрытия тега и перехватить исключение, если оно не найдено. Возможно, вы захотите остановиться, если вы запустили и другой узел mytag:
def do_mytag_stuff(parser, token):
# Process your token however you need
mytag_args = token.split_contents()
try:
nodelist = parser.parse(('endmytag', 'mytag'))
token = parser.next_token()
if token.contents == 'endmytag':
# Found an ending tag, make a node for its contents
parser.delete_first_token()
return MyTagNode(nodelist, mytag_args)
except TemplateSyntaxError:
# Neither tag was found
pass
# So either there's no closing tag, or we met another mytag before a closing tag.
# Do whatever you would for a single tag here
return SingleMyTagNode(mytag_args)
Не уверен, что это на 100% правильно, но, надеюсь, это поможет.