Django şablonlarındaki "hiçbiri" nin eşdeğeri nedir?


107

Django şablonunda bir alanın / değişkenin yok olup olmadığını görmek istiyorum. Bunun için doğru sözdizimi nedir?

Şu anda sahip olduğum şey bu:

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

Yukarıdaki örnekte, "null" yerine ne kullanmalıyım?

Yanıtlar:


135

None, False and Truetümü şablon etiketleri ve filtreleri içinde mevcuttur. None, False, boş dize ( '', "", """""") ve boş listeler / tupleların tümü , Falsetarafından değerlendirildiğinde değerlendirilir if, böylece kolayca yapabilirsiniz

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

Bir ipucu: @fabiocerqueira haklıdır, mantığı modellere bırakın, şablonları tek sunum katmanı olacak şekilde sınırlayın ve modelinizde buna benzer şeyler hesaplayın. Bir örnek:

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

Bu yardımcı olur umarım :)


Az önce Yok'u {% cache%} etiketine parametre olarak iletmeye çalıştım ve kullanılamadığını öğrendim. Bu konuda çalışmakla meşgul.
tobych

7
{% if profile.user.first_name is None %}Django şablonunda sözdizimi hatasına neden olur.
Rockallite

1
İpucunuz, modelinize HTML yerleştirerek, öğretmeye çalıştığınız şeyin tam tersini yaparak sunum ve mantığı karıştırır. İsim yoksa (bir veri modeli için mantıksal davranış) Yok döndürmeye ve ardından default_if_noneşablondaki filtreyi kullanmaya ne dersiniz ?
jbg

@ JasperBryant-Greene haklısın! az önce güncellendi. İyi yakaladın adamım! Teşekkürler!
Gerard

69

Başka bir yerleşik şablon da kullanabilirsiniz default_if_none

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

1
Bunu tarih gibi diğer filtrelerle nasıl kullanacağınıza dair bir fikriniz var mı? Örneğin, bir tarih yoksa "N / A" görüntülemek mümkün müdür, aksi takdirde biçimlendirmek mümkün müdür? Örneğin: {{post.pub_date | default_if_none: "N / A" | date: "Ymd"}}?
Andreas Bergström

@ AndreasBergström Sizin durumunuzda dateönce başvurursunuz . Herhangi bir hata oluşursa, Hiçbiri döndürür. Sonra başvurursun default_if_none.
defance

Bu, Django'nun hangi sürümünü getirdi?
Kullanıcı

11

isoperatör: Django 1.10'da yeni

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


5

Evet hayır yardımcısına bak

Örneğin:

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

4

{% if profile.user.first_name %}çalışır (kabul etmek istemediğinizi varsayarsak '').

ifPython genel davranır None, False, '', [], {}, ... hepsi yanlış olarak.


0

Bunu deneyebilirsin:

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

Bu şekilde, esasen form alanının first_namekendisiyle ilişkilendirilmiş herhangi bir değeri olup olmadığını kontrol edersiniz . Bkz {{ field.value }}içinde Django Dokümanlarından Formun alanları üzerinde döngü .

Django 3.0 kullanıyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.