在 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 %}