#python #jinja2
#python #jinja2
Вопрос:
Мой код на python
d = collections.defaultdict(list)
for k in results:
d[k[0]].append(k[1:4])
e= collections.OrderedDict(sorted(d.items(), key=lambda t: t[0]))
for key,value in e.items():
for p in xrange(len(value)):
print value[p][0]
Что я хочу сделать
Как я могу выбрать значения в jinja из этого бита?
for key,value in e.items():
for p in xrange(len(value)):
print value[p][0]
Я думал, что это будет:
{%for key, value in groups.items()%}
{%for p in xrange(len(value))%}
<tr>
<td>{{value[p][1]}}</td><td>{{value[p][2]}}</td><td>{{value[p][4]}}</td>
<td>{{value[p][5]}}</td><td>{{value[p][3]}}</td>
</tr>
{%endfor%}
{%endfor%}
Хотя это приводит к ошибке
jinja2.exceptions.UndefinedError: 'len' is undefined
Ответ №1:
Не используйте xrange()
; вы можете перебирать список значений напрямую:
{%for key, value in groups.items()%}
{%for elem in value %}
<tr>
<td>{{ elem[1] }}</td><td>{{ elem[2] }}</td><td>{{ elem[4] }}</td>
<td>{{ elem[5] }}</td><td>{{ elem[3] }}</td>
</tr>
{%endfor%}
{%endfor%}
Если вам нужна длина объекта (например, списка), в шаблоне Jinja используйте length
фильтр:
{% if value|length < 5 %}Short list!{% endif %}
count
является псевдонимом для length
.
В Jinja нет xrange()
вызываемого объекта, но вы получаете range()
.
Ответ №2:
как сказал @Martijn Pieters, вы можете выполнять итерации по list
элементам, но для того, чтобы ответить, почему вы получаете это исключение:
len
не определено, но вы можете использовать length()
insted:
длина, как написано в документах, вернет количество элементов последовательности или сопоставления. Вы можете прочитать больше здесь
Также для получения списка, который вы можете использовать count()
, например list_size = my_list.count()