html Jinja2中的嵌套字典到表

m3eecexj  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(139)

我正在挠头,试图从Jinja2中的嵌套dict中正确地格式化一个表,但没有运气。
敕令是这样的:

dict = {
    key_1: {a: 1, b: 2, c: 3},
    key_2: {a: 11, b: 12, c: 13},
}

我希望表看起来像这样:

| key_1      | key_2        |
| ---------- | ------------ |
| a | b | c  | a  | b  | c  |
| ---------- | ------------ |
| 1 | 2 | 3  | 11 | 12 | 13 |

最接近我的是:

<table>
    <tr>
        {% for k1 in dict.keys() %}
        <td>{{ k1 }}</td>
    </tr>
    <tr>
        {% for k2, value in dict[k1].items() %}
        <td> {{ k2 }} </td>
        {% endfor %}
    </tr>
    <tr>
        {% for k2, value in dict[k1].items() %}
        <td> {{ value }} </td>
        {% endfor %}
        {% endfor %}
    </tr>
</table>

但是这样做不起作用。我在赋值k1变量时遇到了麻烦,因为我必须扩展循环,这样会破坏表的布局。我宁愿不重新排列dict或将其拆分为几个dict。
我能把一个像我所拥有的那样的法令转换成Jinja2中的那个结构的表吗?如果能,怎么做?

mftmpeh8

mftmpeh81#

我没有测试我的解决方案,可能有错别字,但要点是:

  • colspan,用于正确格式化
  • 嵌套循环(内部和外部字典)

dict不应用作变量名,应重命名为dct。)

<table>
        <tr>
            {% for k, d2 in dct.items() %}
                <td colspan="{{ d2|length }}">{{ k }}</td>
            {% endfor %}
        </tr>
        <tr>
            {% for d2 in dct.values() %}
                {% for k2 in d2 %}
                    <td>{{ k2 }}</td>
                {% endfor %}
            {% endfor %}
        </tr>
        <tr>
            {% for d2 in dct.values() %}
                {% for v2 in d2.values() %}
                    <td>{{ v2 }}</td>
                {% endfor %}
            {% endfor %}
        </tr>
    </table>

相关问题