regex_search - python template render




Elimina l'output "None" come stringa in Jinja2 (4)

Come posso convincere Jinja2 a non stampare "None" quando il valore è None ?

Ho un numero di voci in un dizionario e vorrei produrre tutto in un singolo ciclo invece di avere casi speciali per parole chiave diverse. Se ho il valore None ( NoneType non la stringa), la stringa "None" viene inserita nei risultati del rendering del modello.

Provare a sopprimerlo usando {{ value or '' }} funziona troppo bene in quanto sostituirà anche il valore numerico zero.

Devo filtrare il dizionario prima di passarlo a Jinja2 per il rendering?


Secondo questo post dalla Mailing List Pocco: https://groups.google.com/d/msg/pocoo-libs/SQ9ubo_Kamw/TadIdab9eN8J

Armin Ronacher (creatore di Jinja2 / Flask, ecc ...) raccomanda il seguente frammento "pythonic":

{{ variable or 0 }} {{ variable or '' }}

L'idea è che, ancora una volta, l'esplicito è preferibile implicito.

Modifica: la risposta selezionata è sicuramente quella corretta. Non mi sono mai imbattuto in una situazione in cui una variabile di template potesse essere una stringa o lo zero numerico, quindi i frammenti di cui sopra potrebbero aiutare a ridurre il rumore del codice nel modello.


Un filtro personalizzato può risolvere il problema. Dichiaralo così:

def filter_supress_none(val):
    if not val is None:
        return val
    else:
        return ''

Installalo in questo modo:

templating_environment.filters['sn'] = filter_supress_none

Usalo in questo modo:

{{value|sn}}


{{ value if value is not none }} funziona alla grande.

se questo genera un errore sul non avere un altro prova a usare un altro ..

{{ value if value is not none else '' }}







jinja2