使用jinja2烧瓶进行迭代的下一个列表

时间:2019-07-16 00:27:44

标签: python list dictionary flask jinja2

我有3list来自烧瓶,其中包含“名称”,“部门”,“位置”,我需要创建一个表并使用所有3list污染行...

**问题我无法一次访问所有3list数据

所以我读了StackOverflow的某个地方,将列表链接到字典,并将字典链接到列表

an_item = dict(name=names, department= departments, position=positions)
itema.append(an_item)

**如果名称是字符串而不是列表,则可以正常工作

烧瓶侧面:

names = ["Alice", "Mike", ...]
department = ["CS", "MATHS", ... ]
position = ["HEAD", "CR", ....]

an_item = dict(name=names, department= departments, position=positions)
itema.append(an_item)

HTML:

<tbody>

   {% for item in items %}
   <tr>
       <td>{{item.name}}</td> #printing the list ["alice", "mike", ...]
       <td>{{item.department}}</td>
       <td>{{item.position}}</td>
   </tr>
   {% endfor %}
</tbody>

我想要一个简单的名称部门和职位表

Name  Department Position
Alice CS         Head
Mike  MATHS      CR

1 个答案:

答案 0 :(得分:1)

这是因为您错误地构建了词典。当您执行dict(name=names, department= departments, position=positions)时,实际上只是创建带有名称列表值的名称键,以及带有部门列表的部门键。这意味着item.name实际上是所有名称的列表。

我想您想要的是每个名称部门位置的词典列表。这样做的方法是遍历并行列表,然后为每个索引创建字典并追加到列表中。

names = ['joe', 'alice', 'bill']
departments = ['CS', 'Math', 'Eng']
position = ['HEAD', 'CR', 'PROF']

items = []
for i in range(len(names)):
    item = dict(name=name[i], department=departments[i], position=positions[i])
    items.append(item)

print(items) # [{'name': 'joe', 'deparment': 'CS', 'position': 'HEAD}, {'name': 'alice', 'department': 'Math',...}...]

然后在HTML中,您将需要使用方括号运算符或.get()

<tbody>

   {% for item in items %}
   <tr>
       <td>{{item['name']}}</td>
       <td>{{item['department']}}</td>
       <td>{{item['position']}}</td>
   </tr>
   {% endfor %}
</tbody>

这应该为您提供所需的桌子。