在 Jinja2 模板上排序字典值
Ordering dictionary values on Jinja2 template
我正在使用 Jinja2 模板将信息呈现到报告中。我正在创建一个 table 显示系统上发生的某些类型事件的最大值、总数、avg_size 和 avg_rate。
我的代码在每 6 个条目后创建一个新行,并打印看起来正确的数据,但仔细检查后它没有以正确的顺序打印数据,因为我使用的是 'if' 语句。
有没有办法让 key2=='max_count'
总是第一个打印它的值,然后 key2 == 'total'
等等
我要的顺序:
max_count, total, avg_size, avg_rate
这是导致问题的代码部分:
{% for key2, value2 in max_min_data[key].iteritems() %}
{% if count == 6 %}
</tr>
<tr>
{% set count = 0 %}
{% endif %}
{% if key2 == 'max_count'%}
<td style="text-align: center; width:3.1in;">{{ '{0:,}'.format(value2['max']) }}</td>
{% endif %}
{% if key2 == 'total'%}
<td style="text-align: center; width:3.1in;">{{'{0:,}'.format(value2['max'])}}</td>
{% endif %}
{% if key2 == 'avg_size'%}
<td style="text-align: center; width:3.1in;">{{'{0:,}'.format(value2['max'])}}</td>
{% endif %}
{% if key2 == 'avg_rate'%}
<td style="text-align: center; width:3.1in;">{{'{0:,}'.format(value2['max'])}}</td>
{% endif %}
{% set count = count + 1 %}
{% endfor %}
我正在遍历的字典示例:
{
'Event1': {
'avg_rate': {'max': 11004, 'min': 0},
'avg_size': {'max': 219, 'min': 218},
'total': {'max': 107743, 'min': 103354},
'max_count': {'max': 103756, 'min': 103094}
},
'Event2': {
'avg_rate': {'max': 558, 'min': 0},
'avg_size': {'max': 321, 'min': 319},
'total': {'max': 11029, 'min': 10046},
'max_count': {'max': 17724, 'min': 17585}
},
'Event3': {
'avg_rate': {'max': 1824, 'min': 0},
'avg_size': {'max': 363, 'min': 360},
'total': {'max': 48737, 'min': 46529},
'max_count': {'max': 47094, 'min': 46711}
}
}
事实证明这是一个比我想象的要简单得多的解决方案。我将 Jinja2 模板更改为以下内容,这为我解决了问题:
{% for key2, value2 in max_min_data[key].iteritems() %}
<td style="text-align: center; width:3.1in;">{{ '{0:,}'.format(value['max_count']['max']) }}</td>
<td style="text-align: center; width:3.1in;">{{'{0:,}'.format(value['total']['max'])}}</td>
<td style="text-align: center; width:3.1in;">{{'{0:,}'.format(value['avg_size']['max'])}}</td>
<td style="text-align: center; width:3.1in;">{{'{0:,}'.format(value['avg_rate']['max'])}}</td>
{% endfor %}
我正在使用 Jinja2 模板将信息呈现到报告中。我正在创建一个 table 显示系统上发生的某些类型事件的最大值、总数、avg_size 和 avg_rate。
我的代码在每 6 个条目后创建一个新行,并打印看起来正确的数据,但仔细检查后它没有以正确的顺序打印数据,因为我使用的是 'if' 语句。
有没有办法让 key2=='max_count'
总是第一个打印它的值,然后 key2 == 'total'
等等
我要的顺序:
max_count, total, avg_size, avg_rate
这是导致问题的代码部分:
{% for key2, value2 in max_min_data[key].iteritems() %}
{% if count == 6 %}
</tr>
<tr>
{% set count = 0 %}
{% endif %}
{% if key2 == 'max_count'%}
<td style="text-align: center; width:3.1in;">{{ '{0:,}'.format(value2['max']) }}</td>
{% endif %}
{% if key2 == 'total'%}
<td style="text-align: center; width:3.1in;">{{'{0:,}'.format(value2['max'])}}</td>
{% endif %}
{% if key2 == 'avg_size'%}
<td style="text-align: center; width:3.1in;">{{'{0:,}'.format(value2['max'])}}</td>
{% endif %}
{% if key2 == 'avg_rate'%}
<td style="text-align: center; width:3.1in;">{{'{0:,}'.format(value2['max'])}}</td>
{% endif %}
{% set count = count + 1 %}
{% endfor %}
我正在遍历的字典示例:
{
'Event1': {
'avg_rate': {'max': 11004, 'min': 0},
'avg_size': {'max': 219, 'min': 218},
'total': {'max': 107743, 'min': 103354},
'max_count': {'max': 103756, 'min': 103094}
},
'Event2': {
'avg_rate': {'max': 558, 'min': 0},
'avg_size': {'max': 321, 'min': 319},
'total': {'max': 11029, 'min': 10046},
'max_count': {'max': 17724, 'min': 17585}
},
'Event3': {
'avg_rate': {'max': 1824, 'min': 0},
'avg_size': {'max': 363, 'min': 360},
'total': {'max': 48737, 'min': 46529},
'max_count': {'max': 47094, 'min': 46711}
}
}
事实证明这是一个比我想象的要简单得多的解决方案。我将 Jinja2 模板更改为以下内容,这为我解决了问题:
{% for key2, value2 in max_min_data[key].iteritems() %}
<td style="text-align: center; width:3.1in;">{{ '{0:,}'.format(value['max_count']['max']) }}</td>
<td style="text-align: center; width:3.1in;">{{'{0:,}'.format(value['total']['max'])}}</td>
<td style="text-align: center; width:3.1in;">{{'{0:,}'.format(value['avg_size']['max'])}}</td>
<td style="text-align: center; width:3.1in;">{{'{0:,}'.format(value['avg_rate']['max'])}}</td>
{% endfor %}