Flask jinja2按键

时间:2017-03-10 22:50:43

标签: python json loops dictionary jinja2

我有dicts列表:

[{'row': '1', 'number': '5'}, {'row': '1', 'number': '10'}, {'row': '1', 'number': '3'}, {'row': '1', 'number': '7'}, {'row': '1', 'number': '2'}, {'row': '1', 'number': '13'}, {'row': '1', 'number': '6'}, {'row': '1', 'number': '12'}, {'row': '1', 'number': '1'}, {'row': '1', 'number': '8'}, {'row': '1', 'number': '9'}, {'row': '1', 'number': '11'}, {'row': '1', 'number': '15'}, {'row': '1', 'number': '14'}, {'row': '1', 'number': '4'}, {'row': '2', 'number': '1'}, {'row': '2', 'number': '4'}, {'row': '2', 'number': '10'}...]

我想通过jinja中的循环进行迭代,并在特定行#

内打印数字

这样的事情:

<div class='row'>row#1 numbers for row #1: 1 2 3 4 ... </div>
<div class='row'>row#2 numbers for row #1: 1 2 3 4 ... </div>
<div class='row'>row#3 numbers for row #1: 1 2 3 4 ... </div>

我在dict中需要divs尽可能多的唯一行。

2 个答案:

答案 0 :(得分:2)

一个选项是重新整形你的字典,使得键是,值是数字,然后很容易遍历这个新字典并构造 divs

result = {}
for d in dd:          # dd is your list of dictionaries here
    result.setdefault(int(d['row']), []).append(d['number'])
​
result
#{'1': ['5',
#  '10',
#  '3',
#  '7',
#  '2',
#  '13',
#  '6',
#  '12',
#  '1',
#  '8',
#  '9',
#  '11',
#  '15',
#  '14',
#  '4'],
# '2': ['1', '4', '10']}

答案 1 :(得分:1)

Jinja2将很难自己做到这一点。您希望将每行的所有数字聚合到一个列表中,然后将该列表打印出来。我建议分两步执行此操作。

row_dict = {}
for num_dict in list_of_dicts:
    row = num_dict['row']
    if row not in row_dict:
        row_dict[row] = []
    row_dict[row].append(num_dict['number'])

现在你有row_dict看起来像:

{
    '1': ['5', '10', '3', '7', '2', '13', '6', '12', '1', '8', '9', ...],
    '2': ['1', '4', '10', ...],
}

Jinja2可以打印出来。您可以编写一个类似这样的模板:

{% for row in row_dict.keys()|sort %}
<div class='row'>row#{{ row }} numbers for row #{{ row }}
  {{ ' '.join(row_dict[row]) }}</div>
{% endfor %}