Jak mówi Albo Duan, Jinja2 ma swój własny język. Wygląda jak Python, ale to nie Python. Zatem wbudowana funkcja Python enumerate
nie jest częścią silnika szablonów Jinja2. Istnieją jednak pewne alternatywy można użyć:
Jeśli chcesz wymienić elementy na liście można użyć loop.index0
pętli specjalnej zmiennej:
>>> from jinja2 import Template
>>> t1 = """
... {% for val in ['a', 'b', 'c'] %}
... <td>
... {{ loop.index0 }} {{ val }}
... </td>
... {% endfor %}
... """
>>> Template(t1).render()
Inną opcją jest precalculate z wymienionych wersji lista:
>>> t2 = """
... {% for i, val in l %}
... <td>
... {{ i }} {{ val }}
... </td>
... {% endfor %}
... """
>>> Template(t2).render(l=enumerate(['a', 'b', 'c']))
a także jeszcze jeden, może być nawet przechodząc enumerate
jako zmienna tOO:
>>> t3 = """
... {% for i, val in enumerate(['a', 'b', 'c']) %}
... <td>
... {{ i }} {{ val }}
... </td>
... {% endfor %}
... """
>>> Template(t3).render(enumerate=enumerate)
Kolba umożliwia automatyczne wprowadzanie zmiennych do kontekstu szablonu za pomocą Context Processors. Więc jeśli chcesz enumerate
wbudowaną funkcję mają być dostępne dla wszystkich szablonów, może to być miły rozwiązanie:
@app.context_processor
def inject_enumerate():
return dict(enumerate=enumerate)
Dzięki Sean Vieira do tej sugestii.
Jeszcze jedną opcją jest zarejestrowanie procesora kontekstowego i udostępnienie w Pythonie tego, co chcesz, w środowisku Jinja. Ładna lista, by the. –
@SeanVieira Ładne rozwiązanie. Dodałem tę opcję do listy. Mam nadzieję, że to, co miałeś na myśli. – dreyescat