шаблон django if или оператор
В основном, чтобы сделать это быстро и просто, я ищу, чтобы запустить условное XOR в шаблоне django. Прежде чем вы спросите, почему бы мне просто не сделать это в коде, это не вариант.
В основном мне нужно проверить, находится ли пользователь в одном из двух объектов "многие ко многим".
req.accepted.all
и
req.declined.all
Теперь они могут быть только в одном или другом (отсюда условие XOR). Из-за осмотра документов единственное, что я могу понять, это после
{% if user.username in req.accepted.all or req.declined.all %}
проблема, с которой я здесь, заключается в том, что если пользователь.имя пользователя действительно появляется в req.общепринятый.все тогда он избегает условного, но если он находится в req.отклонить.все тогда будет следовать условному предложению.
Я что-то пропустил?
2 ответов
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 %}
...
{% endif %}
{% endwith %}
перефразированный ответ из принятого:
для:
{% if A xor B %}
Do:
{% if A and not B or B and not A %}
это работает!