Убедитесь, что тег используется в шаблоне только один раз

Я пишу пользовательский тег для использования в шаблонах Django:{% my_custom_tag %},

Использование каналов Django расширяет некоторые функциональные возможности страницы. Но я беспокоюсь, что пользователи могут случайно вставить этот тег дважды в шаблон, и это может создать некоторые проблемы, потому что каналы будут доставлять одну и ту же информацию дважды и т. Д.

Есть ли относительно простой способ проверить, что тег используется в шаблоне только один раз, и в противном случае вызвать ошибку?

1 ответ

Решение

Вы можете манипулировать контекстом и установить определенный ключ (предпочтительно тот, который не используется другими приложениями) в Trueи поднять исключение в противном случае. Например:

@register.simple_tag(takes_context=True)
def my_custom_tag(context):
    if '__some_weird_name__for_my_custom_tag' in context:
        raise Exception('my_custom_tag is already used')
    context['__some_weird_name__for_my_custom_tag'] = True
    # ...
    # do other logic
    pass

Конечно, условие состоит в том, что вы не передаете контент с этим именем в контекст изначально.

Кроме того, если вы будете выполнять несколько render(..)С точки зрения, они обычно имеют отдельный контекст, но это, вероятно, желательно.

Обратите внимание, что ошибка возникает во время выполнения. Таким образом, мы не определяем заранее шаблоны, где это происходит, но мы получим ошибку, если это произойдет.

Другие вопросы по тегам