Пользовательский тег или блок Django - PullRequest
2 голосов
/ 16 февраля 2012

Мне было интересно, есть ли способ проверить, есть ли у тега конечный блок. Я в основном пытаюсь позволить пользователю сделать

{% mytag 'a' 'b' 'c' %}

или

{% mytag 'a' 'b' 'c' %}
    <!-- other markup here -->
{% end mytag %}

Я видел, что если его там нет, это вызовет исключение, но есть ли способ программно настроить мой тег для безопасной обработки обеих ситуаций?

1 Ответ

3 голосов
/ 16 февраля 2012

Вы можете попытаться выполнить синтаксический анализ до закрытия тега и перехватить исключение, если оно не найдено. Возможно, вы захотите остановиться, если вы запустили и другой узел 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% правильно, но, надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...