Django टेम्प्लेट में "कोई नहीं" के बराबर क्या है?


103

मैं देखना चाहता हूं कि क्या कोई क्षेत्र / चर Django टेम्पलेट के भीतर नहीं है। उसके लिए सही सिंटैक्स क्या है?

वर्तमान में मेरे पास यही है:

{% if profile.user.first_name is null %}
  <p> -- </p>
{% elif %}
  {{ profile.user.first_name }} {{ profile.user.last_name }}
{% endif%}

उपरोक्त उदाहरण में, मैं "नल" को बदलने के लिए क्या उपयोग करूंगा?

जवाबों:


134

None, False and Trueसभी टेम्पलेट टैग और फ़िल्टर के भीतर उपलब्ध हैं। None, False, खाली स्ट्रिंग ( '', "", """""") और खाली सूचियों / टुपल्स Falseद्वारा मूल्यांकन किए जाने पर सभी का मूल्यांकन करते हैं if, ताकि आप आसानी से कर सकें

{% if profile.user.first_name == None %}
{% if not profile.user.first_name %}

एक संकेत: @fabiocerqueira सही है, तर्क को मॉडल पर छोड़ दें, टेम्पलेट्स को केवल प्रस्तुति परत होने के लिए सीमित करें और उस तरह के सामान की गणना करें जो आप मॉडल में करते हैं। एक उदाहरण:

# someapp/models.py
class UserProfile(models.Model):
    user = models.OneToOneField('auth.User')
    # other fields

    def get_full_name(self):
        if not self.user.first_name:
            return
        return ' '.join([self.user.first_name, self.user.last_name])

# template
{{ user.get_profile.get_full_name }}

उम्मीद है की यह मदद करेगा :)


मैंने सिर्फ {% कैश%} टैग के पैरामीटर के रूप में किसी को भी पास करने की कोशिश की और सीखा कि यह उपलब्ध नहीं है। इसके आसपास काम करने में व्यस्त हैं।
18

7
{% if profile.user.first_name is None %}Django टेम्पलेट में सिंटैक्स त्रुटि का कारण बनता है।
रॉकलाइट

1
आपका संकेत HTML को आपके मॉडल में डालकर प्रस्तुति और तर्क को मिलाता है, जो आप सिखाने की कोशिश कर रहे हैं उससे बिल्कुल उलट। यदि कोई नाम नहीं है (डेटा मॉडल के लिए तार्किक व्यवहार) और फिर default_if_noneटेम्पलेट में फ़िल्टर का उपयोग करके किसी को वापस करने के बारे में कैसे ?
jbg

@ जैस्परब्रायंट-ग्रीन आप सही हैं! बस अद्यतन किया गया। अच्छा पकड़ लो यार! धन्यवाद!
जेरार्ड

67

आप किसी अन्य अंतर्निहित टेम्पलेट का भी उपयोग कर सकते हैं default_if_none

{{ profile.user.first_name|default_if_none:"--" }}

1
किसी भी विचार कैसे इस तरह के अन्य फिल्टर के साथ इस का उपयोग करने के लिए तारीख? उदाहरण के लिए, क्या "एन / ए" प्रदर्शित करना संभव है यदि कोई तारीख कोई नहीं है, लेकिन अन्यथा इसे प्रारूपित करें? जैसे: {{post.pub_date | default_if_none: "N / A" | तिथि: "Ymd"}}?
एंड्रियास बर्गस्ट्रॉम

@ AndreasBergström आपके मामले में आप dateपहले आवेदन करते हैं । यदि कोई त्रुटि होती है तो यह कोई नहीं लौटाएगा। फिर आप आवेदन करें default_if_none
डिफेंस

Django के किस संस्करण में इसे लाया गया था?
यूजर

10

isऑपरेटर: Django 1.10 में नया

{% if somevar is None %}
  This appears if somevar is None, or if somevar is not found in the context.
{% endif %}


4

{% if profile.user.first_name %}काम करता है (आप भी स्वीकार नहीं करना चाहते हैं '')।

ifअजगर में सामान्य व्यवहार में None, False, '', [], {}, ... सब झूठे के रूप में।


3

आप अंतर्निहित टेम्पलेट फ़िल्टर का उपयोग भी कर सकते हैं default:

यदि मान गलत का मूल्यांकन करता है (जैसे कोई नहीं, एक खाली स्ट्रिंग, 0, गलत); डिफ़ॉल्ट "-" प्रदर्शित होता है।

{{ profile.user.first_name|default:"--" }}

प्रलेखन: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#default


1
default_if_none शायद एक बेहतर विकल्प होगा।
dbn

0

आप यह कोशिश कर सकते हैं:

{% if not profile.user.first_name.value %}
  <p> -- </p>
{% else %}
  {{ profile.user.first_name }} {{ profile.user.last_name }}
{% endif %}

इस तरह, आप अनिवार्य रूप से यह देखने के लिए जाँच कर रहे हैं कि क्या फॉर्म फ़ील्ड first_nameके साथ कोई मूल्य जुड़ा हुआ है या नहीं। Django प्रलेखन में फार्म के क्षेत्रों{{ field.value }} में लूपिंग में देखें ।

मैं Django 3.0 का उपयोग कर रहा हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.