Как создать HTML-таблицу с помощью простого цикла for в Jinja2?

Я только изучаю Jinja2. Я никогда раньше не делал никаких шаблонов, поэтому сейчас я нахожу документацию очень запутанной.

Как создать таблицу HTML с помощью простого цикла FOR? Мой шаблон выглядит примерно так:

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

Мой код Python выглядит так:

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

Я не могу генерировать таблицы. Я также не знаю, лучший ли это способ заполнить таблицу несколькими полями.


person NomadAlien    schedule 08.02.2012    source источник


Ответы (1)


Просто передайте items в template.render в качестве аргумента ключевого слова - это должен быть список (действительно любой итерируемый) элементов. Если вам нужны подэлементы, используйте класс или словарь. В простейшем случае вы можете использовать словарь:

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)

И тогда ваш код Jinja немного изменится:

<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>
person Sean Vieira    schedule 09.02.2012
comment
Фантастика! Спасибо, Шон, с тобой жизнь безопаснее! Боролся с этим слишком долго и не добился прогресса :-) - person NomadAlien; 09.02.2012