2011-07-09 12 views
27

मैं django के लिए काफी नया हूं, लेकिन जावा दुनिया में कई वर्षों का अनुभव कोडिंग है, इसलिए मुझे इस सवाल से हास्यास्पद लगता है - मुझे यकीन है कि उत्तर स्पष्ट है और मैं बस इसे याद कर रहा हूँ। मुझे Google या किसी चीज़ में यह पूछने का सही तरीका नहीं दिख रहा है ... मैंने django दस्तावेज़ों के माध्यम से खोज की है और यह या तो नहीं है या मैं इसे देख नहीं रहा हूं। मैं बस एक टेम्प्लेट टेस्ट में करना चाहता हूं यदि var शून्य नहीं है या खाली स्ट्रिंग या रिक्त स्थान का एक गुच्छा है। मेरे पास एक मुद्दा है जहां मेरे क्षेत्र में रिक्त स्थान पेश किए जा रहे हैं - एक और मुद्दा जो मुझे करना है, और काम करेगा, लेकिन काम करना चाहता है ... लेकिन, मैं चाहता हूं कि मेरा तर्क काम करे। अभी, क्योंकि मेरी स्ट्रिंग में केवल रिक्त स्थान हैं: {% अगर lesson.assignment%} हमेशा गुजरता है, भले ही मैं इसे नहीं चाहता हूं। मैंने एक ट्रिम प्रकार की कार्यक्षमता की तलाश की है जो {%%} के बीच काम करेगी, लेकिन मुझे कुछ भी नहीं मिल रहा है। मैंने स्ट्रिप की कोशिश की है, लेकिन यह {%%} के बीच काम नहीं करता है। क्या कोई मुझे उत्तर की दिशा में इंगित कर सकता है ... कुछ दस्तावेज़ जिन्हें मैंने याद किया होगा ... कुछ?पायथन Django टेम्पलेट्स और परीक्षण यदि कोई चर शून्य या खाली स्ट्रिंग

धन्यवाद अग्रिम में एक टन!

उत्तर

44
{% if lesson.assignment and lesson.assignment.strip %} 

.strip कॉल str.strip() तो आप सफेद स्थान को केवल-तार खाली के रूप में है, जबकि पूर्ववर्ती जांच सुनिश्चित करती है संभाल कर सकते हैं हम उखाड़ फेंकने None पहले

पत्र (जो .strip() विधि नहीं होगा) कि यह काम करता (./manage.py shell में):

>>> import django 
>>> from django.template import Template, Context 
>>> t = Template("{% if x and x.strip %}OK{% else %}Empty{% endif %}") 
>>> t.render(Context({"x": "ola"})) 
u'OK' 
>>> t.render(Context({"x": " "})) 
u'Empty' 
>>> t.render(Context({"x": ""})) 
u'Empty' 
>>> t.render(Context({"x": None})) 
u'Empty' 
+0

@ पॉलपी 1 9 75: आपने इसे याद किया होगा क्योंकि 'if' में 'और' का उपयोग करना Django के लिए हालिया जोड़ा है। –

1

आप सभी रिक्त स्थान को हटाने के लिए cut filter का उपयोग करके इसे अनुकरण कर सकते हैं। लेकिन आपको शायद यह पता लगाना चाहिए कि इसमें पहली जगह क्यों है।

+0

हाँ, मुझे लगता है कि तथ्य यह है कि यह सब रिक्त स्थान है कि ठीक करने के लिए करना चाहते हैं। हालांकि, मैं चाहता था कि यह किसी भी तरह से काम करे और स्ट्रिप फ़ंक्शन को काम न करे (शॉन का कोड ऊपर काम करता है)। – PaulP1975

0

आप किसी भी अंतर्निहित विधियों को Django टेम्पलेट चर में कहीं भी कॉल कर सकते हैं। उदाहरण के लिए, आप पायथन स्ट्रिंग विधि strip पर कॉल कर सकते हैं। तो यह काम करेगा:

{% if lesson.assignment.strip %} 
+0

समस्या: उसका 'चारफ़िल्ल्ड' एनयूएलएल की अनुमति देता है, इसलिए एक नल फ़ील्ड अपवाद का कारण बनता है क्योंकि 'कोई नहीं' में 'स्ट्रिप' विधि नहीं है। –

+0

मुझे नहीं पता क्यों, लेकिन पहली बार मैंने ऐसा करने की कोशिश की, यह असफल रहा ... मैंने असाधारण स्थिति (शून्य) को मारा होगा ... मुझे याद नहीं है। – PaulP1975

5

तो lesson.assignment एक मॉडल क्षेत्र है, आप अपने मॉडल में एक सहायक समारोह को परिभाषित करने और इसे इस्तेमाल कर सकते हैं:

class Lesson(models.Model): 
    assignment = models.CharField(..., null=True, ...) 
    # ... 

    @property 
    def has_assignment(self): 
     return self.assignment is not None and self.assignment.strip() != "" 

फिर अपने टेम्पलेट में {% if lesson.has_assignment %} का उपयोग करें।

+0

यह एक दिलचस्प विकल्प है ... मुझे बहुत पसंद है कि यह टेम्पलेट में तर्क को कैसे साफ करता है। मैं पाइथन और डीजेंगो के लिए बहुत नया हूं, इसलिए मैं अभी भी रस्सियों को सीख रहा हूं। इस सुझाव के लिए धन्यवाद! – PaulP1975

5

यह उपलब्ध किया गया है नहीं हो सकता है जब प्रश्न पोस्ट किया गया था, लेकिन एक ही विकल्प टेम्पलेट फिल्टर default_if_none में बनाया (०१२३९५९५८५ का उपयोग कर किया जा सकता है)।

उदाहरण के लिए: {{ lesson.assignment|default_if_none:"Empty" }}

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