2013-10-09 11 views
21

असल में यह त्वरित और सरल बनाने के लिए, मैं django टेम्पलेट में एक एक्सओआर सशर्त चलाने की तलाश में हूं। पूछने से पहले मैं कोड में ऐसा क्यों नहीं करता हूं, यह एक विकल्प नहीं है।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 में है तो यह सशर्त खंड का पालन करेगा।

क्या मुझे यहां कुछ याद आ रही है?

उत्तर

24

andor की तुलना में अधिक पूर्वता है, तो आप सिर्फ विघटित संस्करण लिख सकते हैं:,

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

दिलचस्प, बयान के बारे में युक्तियों के लिए धन्यवाद, हालांकि किसी कारण से यह सशर्त इसके भीतर एक और बयान स्वीकार नहीं करेगा। {% endwith%} के लिए पूछता रहता है –

+0

आप उन्हें सही तरीके से घोंसला कर रहे हैं, है ना? यह '{%%%} {% अगर%} {% else%} {% endif%} {% endwith%}' होना चाहिए। –

+0

मैंने कोड के अनुभाग के साथ ऊपर अपना प्रश्न संपादित किया है। –

2

पुनः निर्मित जवाब एक:

प्राप्त करने के लिए:

{% if A xor B %}

है:

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

यह काम करता है!

संबंधित मुद्दे