Apa yang setara dengan "tidak ada" dalam template django?


102

Saya ingin melihat apakah sebuah field / variabel tidak ada dalam template Django. Apa sintaks yang benar untuk itu?

Inilah yang saya miliki saat ini:

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

Pada contoh di atas, apa yang akan saya gunakan untuk mengganti "null"?

Jawaban:


132

None, False and Truesemua tersedia dalam tag dan filter template. None, False, string kosong ( '', "", """""") dan daftar kosong / tupel semuanya dievaluasi Falseketika dievaluasi oleh if, sehingga Anda dapat melakukannya dengan mudah

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

Petunjuk: @fabiocerqueira benar, serahkan logika pada model, batasi template untuk menjadi satu-satunya lapisan presentasi dan hitung hal-hal seperti itu dalam model Anda. Sebuah contoh:

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

Semoga ini membantu :)


Saya baru saja mencoba meneruskan None sebagai parameter ke tag {% cache%} dan mengetahui bahwa itu tidak tersedia. Sibuk mengerjakan ini.
tobych

7
{% if profile.user.first_name is None %}menyebabkan kesalahan sintaks pada cetakan Django.
Rockallite

1
Petunjuk Anda mencampurkan presentasi dan logika dengan meletakkan HTML dalam model Anda, melakukan hal yang berlawanan dengan apa yang Anda coba ajarkan. Bagaimana jika mengembalikan None jika tidak ada nama (perilaku logis untuk model data) dan kemudian menggunakan default_if_nonefilter di template?
jbg

@ JasperBryant-Greene Anda benar! baru saja diperbarui. Tangkap yang bagus! Terima kasih!
Gerard

67

Anda juga dapat menggunakan templat bawaan lainnya default_if_none

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

1
Ada ide bagaimana menggunakan ini dengan filter lain seperti tanggal? Misalnya, apakah mungkin untuk menampilkan "T / A" jika tanggal tidak ada tetapi sebaliknya memformatnya? Suka: {{post.pub_date | default_if_none: "T / A" | date: "Ymd"}}?
Andreas Bergström

@ AndreasBergström Dalam kasus Anda, Anda mendaftar dateterlebih dahulu. Jika terjadi kesalahan, itu akan mengembalikan Tidak ada. Kemudian Anda melamar default_if_none.
pertahanan

Versi Django apakah yang dibawa ini?
Pengguna

10

isoperator: Baru di Django 1.10

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

5

Lihatlah pembantu yesno

Misalnya:

{{ myValue|yesno:"itwasTrue,itWasFalse,itWasNone" }}

4

{% if profile.user.first_name %}bekerja (dengan asumsi Anda juga tidak ingin menerima '').

ifPython di memperlakukan umum None, False, '', [], {}, ... semua sebagai palsu.



0

Anda bisa mencoba ini:

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

Dengan cara ini, Anda pada dasarnya memeriksa untuk melihat apakah bidang formulir first_namememiliki nilai yang terkait dengannya. Lihat {{ field.value }}dalam Perulangan pada bidang formulir di Dokumentasi Django .

Saya menggunakan Django 3.0.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.