Продвинутая логика шаблонов Django
Я не уверен, действительно ли это очень просто, и я просто просмотрел его в документации, или если это ограничение системы шаблонов Django, но мне нужно сделать немного (не очень) продвинутое логики в Django, и я бы предпочел не повторять себя во всем.
Скажем, у меня есть 3 булевых значения; A, B и C.
Мне в основном нужно делать:
{% if A and (B or C) %}
{{ do stuff }}
{% endif %}
Однако Django, похоже, не позволяет группировать логику (B or C)
с круглыми скобками. Есть ли способ сделать такую группировку на языке шаблонов Django? Или мне нужно сделать версию un-DRY, которая была бы следующей:
{% if A and B %}
{{ do stuff }}
{% else %}
{% if A and C %}
{{ do the same stuff }}
{% endif %}
{% endif %}
Ответы
Ответ 1
docs для тега if if говорят:
Использование фактических скобок в теге if является недопустимым синтаксисом. Если вам нужно указать приоритет, вы должны использовать вложенные теги.
Это более чистый способ выразить свою логику с помощью вложенных тегов:
{% if A %}
{% if B or C %}
{{ do stuff }}
{% endif %}
{% endif %}
Ответ 2
Назначьте что-либо внутри скобки для переменной.
{% with B or C as D %}
{% if A and D %}
{{ do stuff }}
{% endif %}
{% endwith %}
PS: Это не работает в более новых версиях.
Ответ 3
В качестве альтернативы вы можете "расширить" содержимое скобки и оценить ее как:
{% if A and B or A and C %}
{{ do stuff }}
{% endif %}