web-dev-qa-db-fra.com

Comment construire une table HTML avec une boucle for simple dans Jinja2?

J'apprends juste Jinja2. Je n'ai jamais fait de modèles auparavant, donc je trouve la documentation très confuse en ce moment.

Comment créer un tableau HTML avec une simple boucle FOR? Mon modèle ressemble à ceci:

{% for item in items %}
<TR>
   <TD class="c1"><IMG src="favicon.ico"></TD>
   <TD class="c2">{{date}}</TD>
   <TD class="c3">{{id}}</TD>
   <TD class="c4"><SPAN>{{position}}</SPAN></TD>
   <TD class="c5"><SPAN>{{status}}</SPAN></TD>
</TR>
{% endfor %}

Mon code python ressemble à ceci:

import jinja2
loader = jinja2.FileSystemLoader('./index.html')
env = jinja2.Environment(loader=loader)
template = env.get_template('')
print template.render(date='2012-02-8', id='123', position='here', status='Waiting')

Je n'arrive pas à générer de tables. Je ne sais pas non plus si c'est la meilleure façon de remplir une table avec plusieurs champs.

32
NomadAlien

Passez simplement items à template.render comme argument de mot-clé - ce devrait être une liste (vraiment n'importe quel itérable fera l'affaire) d'éléments. Si vous avez besoin de sous-éléments, utilisez une classe ou un dictionnaire. Dans le cas le plus simple, vous pouvez utiliser un dictionnaire:

items = []
for i in range(1, 11):
    i = str(i)

    # dict == {}
    # you just don't have to quote the keys
    an_item = dict(date="2012-02-" + i, id=i, position="here", status="waiting")
    items.append(an_item)

# ... your code here ...

template.render(items=items)

Et puis votre code Jinja changerait légèrement:

<table>
{% for item in items %}
<TR>
   <TD class="c1"><IMG src="favicon.ico"></TD>
   <TD class="c2">{{item.date}}</TD>
   <TD class="c3">{{item.id}}</TD>
   <TD class="c4"><SPAN>{{item.position}}</SPAN></TD>
   <TD class="c5"><SPAN>{{item.status}}</SPAN></TD>
</TR>
{% endfor %}
</table>
65
Sean Vieira