Убедитесь, что тег используется в шаблоне только один раз
Я пишу пользовательский тег для использования в шаблонах 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(..)
С точки зрения, они обычно имеют отдельный контекст, но это, вероятно, желательно.
Обратите внимание, что ошибка возникает во время выполнения. Таким образом, мы не определяем заранее шаблоны, где это происходит, но мы получим ошибку, если это произойдет.