2013-10-09 19 views
21

Temel olarak bunu hızlı ve basit yapmak için django şablonunda bir XOR koşullu çalışıyorum. Neden sormadan önce sadece kodda yapmıyorum, bu bir seçenek değil.django şablonu

Temel olarak, bir kullanıcının çoktan çoğa çok sayıda nesneden birinde olup olmadığını kontrol etmem gerekiyor.

req.accepted.all 

ve

req.declined.all 

Şimdi onlar sadece bir ya (dolayısıyla XOR koşullu) diğer olabilir. dokümanlar üzerinde etrafa itibaren anlamaya tek şey

{% if user.username in req.accepted.all or req.declined.all %} 

Burada yaşıyorum sorun user.username gerçekten req.accepted.all görünür yoksa o zaman kaçar olmasıdır aşağıdaki koşullu ama eğer req.declined.all ise koşullu maddeyi takip edecektir.

Burada bir şey mi özlüyorum?

cevap

24

andor daha yüksek önceliğe sahiptir, böylece sadece çürümüş versiyonunu yazabilir: Kabul dan

{% 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 %} 
+0

İlginç, açıklama ile ilgili ipuçları için teşekkürler, ancak bazı nedenlerden dolayı bu koşul onun içinde başka bir ifade kabul etmeyecektir. {% endwith%} için soruyor –

+0

Doğru şekilde yerleştiriyorsunuz değil mi? % {% Ile%} {% if%} {% else%} {% endif%} {% endwith%} 'olmalıdır. –

+0

Yukarıdaki sorumu kod bölümü ile düzenledim. –

2

rephrased cevabı: Sorgu kümelerini yeniden değerlendirilmesinde atlamak için with kullanarak verim için

{% 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 %} 

bir:

Almak için:

{% if A xor B %}

Do:

{% if A and not B or B and not A %}

Çalışıyor!