Controllo del Flusso
Grazie a Flask si può controllare il flusso come in un normale script in Python anche nei nostri template. L'inclusione di condizionamenti if e if/else ci permette di controllare come vengono gestiti i dati.
Per utilizzare le dichiarazioni in un template si utilizza il delimitatore di dichiarazioni: {% %}.
{% if condition %}
<p>Testo restituito se la condizione è True</p>
{% endif %}
Il delimitatore {% endif %} è necessario per chiudere la dichiarazione if.
La condizione può includere una variabile che viene testata utilizzando operatori di confronto standard, <, >, >=, <=, >=, ==, !=.
{% if variabile_template == "Benvenuto" %}
<p>{{variabile_template}} su tuttofaredigitale.it</p>
{% endif %}
All'interno dei delimitatori di frase {% %} possiamo accedere alle variabili senza usare il consueto delimitatore di espressione {{ }}.
Una variabile definita come None o False o uguale a 0 o contenente una sequenza vuota come "" o [] verrà testata come False.
I delimitatori {% else %} e {% elif %} possono essere inclusi per creare sequenze multiple se le affermazioni.
Loop For
I processi ripetitivi sono di uso comune nella maggior parte delle applicazioni informatiche e nei template non è diverso. La creazione di liste, tabelle sono tutti compiti ripetitivi che possono essere risolti utilizzando il for loop.
Usando lo stesso blocco di delimitazione delle dichiarazioni come hai visto per l'if {% %}.
<ol>{% for x in range(3) %}
<li>{{ x }}</li>
{% endfor%}
</ol>
# Output:
1. 0
2. 1
3. 2
La sintassi è simile a quella di un normale for in Python. La variabile del loop locale può essere usata all'interno del loop con l'espressione delimitatore {{ }}.
Simile alle affermazioni if dobbiamo chiudere il loop con la dicitura {%endfor%}.
Di seguito sono riportate alcune altre applicazioni di un for loop.
In una lista:
{% for elemento in template_lista %}
In una stringa:
{% for carattere in "Stringa" %}
Iterate in un dictionary:
{% for chiave in template_dict %}
Iterate con chiavi ed i valori di un dictionary con item():
{% for chiave, valore in template_dict.items() %}
Usando il dictsort del filtro in un loop, le coppie chiave/valore vengono emesse proprio come items().