【发布时间】:2016-09-22 20:35:07
【问题描述】:
我正在使用 Jinja2 模板将信息呈现给报告。我正在创建一个表格,显示系统上发生的某些类型事件的最大值、总计、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}
}
}
【问题讨论】:
-
你也可以发布你循环的数据吗?
-
@NilsWerner 我已经发布了我正在循环浏览的字典示例
-
下次也请格式化字典,以便人们可以阅读它(为你做的)。您似乎正在使用两个循环来遍历字典,您可以发布更多上下文和所需的输出吗?
-
@NilsWerner 当我在我的 Jinja 模板中使用 'if' 语句时,它出现在我的报告中的顺序是 'avg_rate','avg_size','total','max_count' 因为那是命令它在字典中。我的问题是如何使 Jinja 模板中的顺序不依赖于字典中的顺序,而只考虑我在上面的问题中陈述的顺序。
-
目前的代码会创建像
avg_rate | avg_size | total | max_count | avg_rate | avg_size --- total | max_count | avg_rate | avg_size ...这样的行,混合来自两个事件的列。这真的是你想要的吗?
标签: python html templates dictionary jinja2