2012-02-08 17 views
24

Estoy aprendiendo Jinja2. Nunca antes he hecho plantillas, por lo que la documentación me resulta muy confusa en este momento.¿Cómo crear una tabla HTML con un bucle for simple en Jinja2?

¿Cómo construyo una tabla HTML con un simple bucle FOR? Mi plantilla es como la siguiente:

{% 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 %} 

mi código Python se ve así:

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') 

Me parece que no puede generar ninguna tabla. Tampoco sé si esta es la mejor forma de poblar una tabla con varios campos.

Respuesta

47

Simplemente pase items a template.render como argumento de palabra clave: debe ser una lista (realmente cualquier iterable servirá) de elementos. Si necesita subtemas, use una clase o un diccionario. En el caso más simple, se puede usar un diccionario:

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) 

Y luego el código de Jinja cambiaría ligeramente:

<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> 
+0

fantástico! Gracias Sean, ¡eres una vida más segura! He estado luchando con esto por mucho tiempo y no progreso :-) – NomadAlien