如何将collections.defaultdict(list)的结果从嵌套列表输出到jinja?

时间:2014-06-13 15:40:49

标签: 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

2 个答案:

答案 0 :(得分:3)

不要使用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 filter

{% if value|length < 5 %}Short list!{% endif %} 

countlength的别名。

Jinja中没有xrange()可调用,但你得到range()

答案 1 :(得分:0)

as @Martijn Pieters说你可以迭代list元素,但为了回答你为什么会得到这个例外:

len未定义,但您可以使用length() insted:

文档中写入的长度将返回序列或映射的项目数。您可以阅读更多here

另外,要获得leagnth,您可以count()使用list_size = my_list.count()