python - tutorial - django templates examples
plantilla django if o declaraciĆ³n (2)
Respuesta reformulada de la aceptada:
Llegar:
{% if A xor B %}
Hacer:
{% if A and not B or B and not A %}
¡Funciona!
Básicamente para hacer esto rápido y simple, estoy buscando ejecutar un XOR condicional en la plantilla django. Antes de preguntar por qué no lo hago en el código, esta no es una opción.
Básicamente, necesito verificar si un usuario está en uno de dos objetos de muchos a muchos.
req.accepted.all
y
req.declined.all
Ahora solo pueden estar en uno u otro (de ahí el condicional XOR). Al mirar los documentos, lo único que puedo descubrir es lo siguiente
{% if user.username in req.accepted.all or req.declined.all %}
El problema que tengo aquí es que si user.username aparece en req.accepted.all, entonces escapa del condicional pero si está en req.declined.all, entonces seguirá la cláusula condicional.
¿Me estoy perdiendo de algo?
and
tiene una precedencia mayor que or
, por lo que solo puede escribir la versión descompuesta:
{% 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 %}
Para mayor eficiencia, use with
para omitir la reevaluación de los conjuntos de consultas:
{% 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 %}