Come dice o Duan, Jinja2 ha un suo linguaggio. Sembra Python ma non è Python. Quindi la funzione built-in Python enumerate
non fa parte del motore di template Jinja2. Vi sono, tuttavia, alcune alternative è possibile utilizzare:
Se si desidera enumerare gli elementi di una lista è possibile utilizzare il loop.index0
ciclo variabile speciale:
>>> from jinja2 import Template
>>> t1 = """
... {% for val in ['a', 'b', 'c'] %}
... <td>
... {{ loop.index0 }} {{ val }}
... </td>
... {% endfor %}
... """
>>> Template(t1).render()
Un'altra opzione è quella di precalculate la versione enumerato di la lista:
>>> t2 = """
... {% for i, val in l %}
... <td>
... {{ i }} {{ val }}
... </td>
... {% endfor %}
... """
>>> Template(t2).render(l=enumerate(['a', 'b', 'c']))
Ed anche un altro, potrebbe essere anche passando enumerate
come una variabile troppo:
>>> t3 = """
... {% for i, val in enumerate(['a', 'b', 'c']) %}
... <td>
... {{ i }} {{ val }}
... </td>
... {% endfor %}
... """
>>> Template(t3).render(enumerate=enumerate)
Flask consente l'iniezione automatica di variabili nel contesto di un modello tramite Context Processors. Quindi, se volete enumerate
funzione built-in per essere disponibili per tutti i modelli, questa potrebbe essere una bella soluzione:
@app.context_processor
def inject_enumerate():
return dict(enumerate=enumerate)
Grazie a Sean Vieira per questo suggerimento.
Un'altra opzione è registrare un processore di contesto ed esporre ciò che si desidera da Python all'interno dell'ambiente Jinja. Bella lista, a cura di. –
@SeanVieira Bella soluzione. Ho aggiunto questa opzione alla lista. Spero sia quello che volevi dire. – dreyescat