2011-05-12 12 views
7

Dalla documentazione Django,Does default_if_none non ha alcun utilizzo nei template di Django?

Generalmente, se una variabile non esiste, il modello di sistema inserisce il valore dell'impostazione TEMPLATE_STRING_IF_INVALID, che è impostato a '' (la stringa vuota) per impostazione predefinita.

filtri applicati a un variabile valido verranno applicate solo se TEMPLATE_STRING_IF_INVALID è impostato '' (la stringa vuota). Se TEMPLATE_STRING_IF_INVALID è impostato su qualsiasi altro valore, i filtri variabili verranno ignorati .

Questo comportamento è leggermente diverso per i tag if, for e raggruppare modello . Se una variabile non valida è fornita a uno di questi tag modello , la variabile verrà interpretata come Nessuno. . I filtri vengono sempre applicati alle variabili non valide all'interno di questi tag modello .

Se una variabile non valida sempre viene tradotto in '', per i tag di template e filtri diversi da se, per e riorganizzarsi, allora a che serve il filtro del modello default_if_none fare? Obsoleto?

risposta

11

C'è una differenza tra una variabile non valida e una che esiste ma ha un valore di None.

Si consideri il seguente quadro:

{'apple':'green','banana':None}` 

Nel modello {{ apple }} risolve a green, mentre {{ banana }} decide di None, e {{ orange }} decide di TEMPLATE_STRING_IF_INVALID.

Considerare ora {{ banana|default_if_none:'yellow' }} e si dovrebbe vedere l'uso del tag default_if_none.

3

Ecco un caso in cui ho utilizzato default_if_none un paio di volte. Sto interrogando un database secondario in cui non ho controllo e sto visualizzando i dati nel modello. La maggior parte delle volte i dati sembrano buoni, ma a volte il valore dei dati mostra None. In tal caso, userò il filtro come:

{{ data_value|default_if_none:"N/A" }} 

il grande pubblico e gli utenti del sito di solito non capire che cosa il None mezzi di valore, sostituendolo con una parola più gentile, il filtro è disponibile in default_if_none maneggevole.

+0

Fare attenzione quando si desidera unire più di un filtro. Ad esempio: 'valore | upper | default_if_none:" - "' non funziona, dovresti mettere: 'valore | default_if_none:" - "| upper' – Virako

Problemi correlati