Продвинутая логика шаблонов 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 %}