อะไรคือสิ่งที่เทียบเท่ากับ "none" ในเทมเพลต django


107

ฉันต้องการดูว่าไม่มีฟิลด์ / ตัวแปรอยู่ในเทมเพลต Django หรือไม่ ไวยากรณ์ที่ถูกต้องคืออะไร?

นี่คือสิ่งที่ฉันมีอยู่ในปัจจุบัน:

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

ในตัวอย่างด้านบนฉันจะใช้อะไรแทน "null"

คำตอบ:


135

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

หวังว่านี่จะช่วยได้ :)


ฉันเพิ่งพยายามส่ง None เป็นพารามิเตอร์ไปยังแท็ก {% cache%} และได้เรียนรู้ว่าไม่สามารถใช้ได้ ไม่ว่างทำงานรอบนี้
tobych

7
{% if profile.user.first_name is None %}ทำให้เกิดข้อผิดพลาดทางไวยากรณ์ในเทมเพลต Django
Rockallite

1
คำใบ้ของคุณผสมผสานการนำเสนอและตรรกะโดยการใส่ HTML ในโมเดลของคุณซึ่งตรงข้ามกับสิ่งที่คุณพยายามจะสอน จะคืนค่า None ได้อย่างไรหากไม่มีชื่อ (พฤติกรรมเชิงตรรกะสำหรับโมเดลข้อมูล) แล้วใช้default_if_noneตัวกรองในเทมเพลต
jbg

@ JasperBryant-Greene คุณพูดถูก! เพิ่งอัปเดต คนจับเก่ง! ขอบคุณ!
Gerard

69

คุณยังสามารถใช้เทมเพลตในตัวอื่นได้ default_if_none

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

1
มีความคิดอย่างไรกับการใช้ตัวกรองอื่น ๆ เช่นวันที่ ตัวอย่างเช่นเป็นไปได้หรือไม่ที่จะแสดง "N / A" หากวันที่ไม่มีเลย แต่จัดรูปแบบเป็นอย่างอื่น ชอบ: {{post.pub_date | default_if_none: "N / A" | date: "Ymd"}} ไหม
Andreas Bergström

@ AndreasBergströmในกรณีของคุณคุณสมัครdateก่อน หากมีข้อผิดพลาดเกิดขึ้นจะส่งกลับ None default_if_noneแล้วที่คุณใช้
ท้า

Django รุ่นนี้ถูกนำเข้ามาในรุ่นใด?
ผู้ใช้


6

คุณยังสามารถใช้ตัวกรองเทมเพลตในตัวdefault:

ถ้าค่าประเมินเป็น False (เช่นไม่มีสตริงว่าง 0 False); ค่าเริ่มต้น "-" จะปรากฏขึ้น

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

เอกสารประกอบ: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#default


1
default_if_none น่าจะเป็นตัวเลือกที่ดีกว่า
dbn


4

{% if profile.user.first_name %}ใช้งานได้ (สมมติว่าคุณไม่ต้องการยอมรับ'')

ifในหลามทั่วไปถือว่าNone, False, '', [], {}... ทั้งหมดเป็นเท็จ


0

คุณสามารถลองสิ่งนี้:

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

ด้วยวิธีนี้คุณกำลังตรวจสอบเพื่อดูว่าฟิลด์แบบฟอร์มfirst_nameมีค่าที่เกี่ยวข้องหรือไม่ ดู{{ field.value }}ในการวนรอบมากกว่าเขตข้อมูลแบบฟอร์มใน Django เอกสาร

ฉันใช้ Django 3.0

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.