2012-08-14 10 views
50

Voglio vedere se un campo/variabile non è presente in un modello Django. Qual è la sintassi corretta per questo?Qual è l'equivalente di "none" nei template di Django?

Questo è quello che ho attualmente:

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

Nell'esempio di cui sopra, ciò che vorrei utilizzare per sostituire "null"?

risposta

76

None, False and True tutti sono disponibili all'interno dei tag di modello e filtri. None, False, la stringa vuota ('', "", """""") ed elenca i vuoti/tuple tutti restituiscono False quando valutato da if, in modo da poter facilmente fare

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

Un consiglio: @fabiocerqueira ha ragione, lasciare la logica per modelli, modelli limite a sii l'unico livello di presentazione e calcola cose del genere nel tuo modello. Un esempio:

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

Spero che questo aiuti :)

+0

Ho solo cercato di passare Nessuno come parametro del tag {% cache%} e impara che non è disponibile. Impegnato a lavorare su questo. – tobych

+6

'{% se profile.user.first_name è None%}' provoca errori di sintassi nel modello Django. – Rockallite

+0

Il tuo suggerimento mescola presentazione e logica mettendo HTML nel tuo modello, facendo esattamente l'opposto di quello che stai cercando di insegnare. Che ne dici di restituire None se non esiste un nome (comportamento logico per un modello di dati) e quindi utilizzare il filtro 'default_if_none' nel modello? – jbg

3

{% if profile.user.first_name %} funziona (presupponendo che non si desideri accettare anche '').

if in Python in ossequi generali None, False, '', [], {}, ... tutto come false.

2

Non hai bisogno di fare questo 'se', uso: {{ profile.user.get_full_name }}

4

sguardo al yesno aiutante

Esempio:

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

È anche possibile utilizzare il filtro incorporato modello default:

Se il valore restituisce False (ad es. Nessuno, una stringa vuota , 0, Falso); viene visualizzato il valore predefinito "-".

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

Documentazione: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#default

+0

default_if_none sarebbe probabilmente un'opzione migliore. – dbn

27

È inoltre possibile utilizzare un altro modello integrato default_if_none

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

Qualche idea su come usarlo con altri filtri come la data?Ad esempio, è possibile visualizzare "N/A" se una data non è presente ma in caso contrario la formatta? Tipo: {{post.pub_date | default_if_none: "N/A" | date: "Y-m-d"}}? –

1

is operator: New in Django 1,10

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