2012-08-14 14 views
50

Chcę sprawdzić, czy pole/zmienna nie ma w szablonie Django. Jaka jest prawidłowa składnia?Co to jest odpowiednik "none" w szablonach django?

To co obecnie mam:

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

W powyższym przykładzie, co byłoby użyć do zastąpienia "null"?

Odpowiedz

76

None, False and True wszystkie są dostępne wewnątrz tagów szablonów i filtrów. None, False, pusty string ('', "", """""") i pustych list/krotki wszystkie oceny do False gdy oceniano if, dzięki czemu można łatwo zrobić

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

Podpowiedź: @fabiocerqueira ma rację, zostaw logikę modeli, szablonów do granicznych być jedyną warstwą prezentacji i obliczyć takie rzeczy w twoim modelu. Przykład:

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

Nadzieja to pomaga :)

+0

Ja tylko starałem się przekazać Brak jako parametr tagu {% cache%} i ucz się ed, że nie jest dostępny. Zajęty pracą nad tym. – tobych

+6

'{% if profile.user.first_name to None%}' powoduje błąd składni w szablonie Django. – Rockallite

+0

Twoja podpowiedź łączy prezentację i logikę, umieszczając kod HTML w swoim modelu, robiąc dokładnie odwrotność tego, co próbujesz uczyć. Jak powrócić Brak, jeśli nie ma nazwy (zachowanie logiczne dla modelu danych), a następnie za pomocą filtru 'default_if_none' w szablonie? – jbg

3

{% if profile.user.first_name %} działa (zakładając, że również nie chcesz akceptować '').

if w Pythonie na ogół traktuje None, False, '', [], {} ... wszystko jako fałszywe.

2

Nie trzeba robić tego „if”, przeznaczenie: {{ profile.user.get_full_name }}

4

Spójrz na yesno pomocnika

np

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

Można również użyć innego wbudowany szablon default_if_none

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

Każdy pomysł, jak tego użyć z innymi filtrami, takimi jak data?Na przykład, czy możliwe jest wyświetlenie "N/A", jeśli data nie ma, ale w przeciwnym razie sformatować? Na przykład: {{post.pub_date | default_if_none: "N/A" | date: "Y-m-d"}}? –

1

is operatora: Nowy w Django 1,10

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