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

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

Comment puis-je construire une table 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.

27
demandé sur Daniel Beck 2012-02-08 21:25:12

1 réponses

Il suffit de passer items à template.render comme argument de mot-clé-ce devrait être une liste (vraiment tout itérable fera) 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>
51
répondu Sean Vieira 2016-02-17 18:28:34