In Jinja2, come si verifica se una variabile non è definita?


191

Convertendo da Django, sono abituato a fare qualcosa del genere:

{% if not var1 %} {% endif %}

e farlo funzionare se non inserissi var1 nel contesto. Jinja2 mi dà un errore indefinito. C'è un modo semplice per dire {% if var1 == None %}o simili?

Risposte:


336

Dalla documentazione del progettista del modello Jinja2 :

{% if variable is defined %}
    value of variable: {{ variable }}
{% else %}
    variable is not defined
{% endif %}

Credo che sia così, ma i miei termini di ricerca spesso non lo riflettono.
dannyman,

17
Inoltre, è possibile utilizzare {% if variable is not defined %}per testare l'inverso.
pbaranay,


1
{% if variable is defined and variable %}verificherebbe anche il vuoto
Vivek,

32

{% if variable is defined %}è vero se la variabile è None.

Poiché not is Nonenon è consentito, ciò significa che

{% if variable != None %}

è davvero la tua unica opzione.


Se variableviene sempre valutato Truequando non è Nessuno, {% if variable != None %}equivale a {% if variable %}.
azalea,

Se si desidera verificare l' Noneuso in minuscolonone {% if variable is not none %}
Felipe Alvarez,

14

Puoi anche definire una variabile in un modello jinja2 come questo:

{% if step is not defined %}
{% set step = 1 %}
{% endif %}

E poi puoi usarlo in questo modo:

{% if step == 1 %}
<div class="col-xs-3 bs-wizard-step active">
{% elif step > 1 %}
<div class="col-xs-3 bs-wizard-step complete">
{% else %}
<div class="col-xs-3 bs-wizard-step disabled">
{% endif %}

Altrimenti (se non si utilizza {% set step = 1 %}) il codice superiore genererebbe:

UndefinedError: 'step' is undefined

12

Nella configurazione dell'ambiente, abbiamo avuto undefined = StrictUndefined, che ha impedito che valori indefiniti fossero impostati su qualsiasi cosa. Questo risolto:

from jinja2 import Undefined
JINJA2_ENVIRONMENT_OPTIONS = { 'undefined' : Undefined }

5

Prendi in considerazione l'utilizzo del filtro predefinito se è quello che ti serve. Per esempio:

{% set host = jabber.host | default(default.host) -%}

o usa più valori di fallback con "hardcoded" uno alla fine come:

{% set connectTimeout = config.stackowerflow.connect.timeout | default(config.stackowerflow.timeout) | default(config.timeout) | default(42) -%}

1

{% if variable is defined %} lavora per verificare se qualcosa non è definito.

È possibile cavarsela utilizzando {% if not var1 %}se si impostano le variabili su False, ad es

class MainHandler(BaseHandler):
    def get(self):
        var1 = self.request.get('var1', False)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.