Скобки в выражении django if

Как я могу сделать это в шаблоне Django? В принципе, если A, или (B и C), я хочу показать некоторый HTML.

У меня в основном есть:

{% if user.is_admin или something.enable_thing и user.can_do_the_thing%}

Теперь это немного неоднозначно. Я пробовал делать

{% if user.is_admin или (something.enable_thing и user.can_do_thething)%}

Но вы не допустили скобки. Документы говорят использовать вложенные ifs (или elifs в этом случае, я думаю, как его OR), но я не хочу повторять один и тот же HTML внутри 2, если блоки, что звучит ужасно.

Ответы

Ответ 1

Как отметил Михай Замфир, он должен работать так, как ожидалось. Как документация Django упоминает:

Использование как и и или пункты в пределах одного тега допускается, и имеющие более высокий приоритет, чем или, например:

{% if athlete_list и coach_list или cheerleader_list%}

будет интерпретироваться так:

if (athlete_list и coach_list) или cheerleader_list

Ответ 2

вы можете выполнить проверку в своем представлении и передать флаг в контекст.

show_html = user.is_admin or (something.enable_thing and user.can_do_the_thing)
context['show_html'] = show_html

Затем в вашем шаблоне вы можете проверить флаг

{% if show_html %}