Шаблон django if или statement
В основном, чтобы сделать это быстро и просто, я ищу, чтобы запускать условное выражение XOR в шаблоне django. Прежде чем вы спросите, почему бы мне просто не сделать это в коде, это не вариант.
В основном мне нужно проверить, находится ли пользователь в одном из двух объектов "много-ко-многим".
req.accepted.all
и
req.declined.all
Теперь они могут быть только в одном или другом (отсюда условное условие XOR). От взгляда на документы, единственное, что я могу выяснить, это следующее
{% if user.username in req.accepted.all or req.declined.all %}
Проблема, с которой я столкнулась, заключается в том, что если user.username действительно появляется в req.accepted.all, то он ускользает от условного, но если он в req.declined.all, то он будет следовать условному предложению.
Я что-то пропустил?
Ответы
Ответ 1
and
имеет более высокий приоритет, чем or
, поэтому вы можете просто написать разложенную версию:
{% if user.username in req.accepted.all and user.username not in req.declined.all or
user.username not in req.accepted.all and user.username in req.declined.all %}
Для эффективности используйте with
, чтобы пропустить переоценку запросов:
{% with accepted=req.accepted.all declined=req.declined.all username=user.username %}
{% if username in accepted and username not in declined or
username not in accepted and username in declined %}
...
{% endwith %}
Ответ 2
Перефразируемый ответ от принятого:
Чтобы получить:
{% if A xor B %}
делать:
{% if A and not B or B and not A %}
Это работает!