You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jinja2模板中将字典渲染为指定格式表格?

解决Jinja2渲染字典为指定表格的问题

你的原代码存在两处核心问题:一是Jinja2语法错误,二是逻辑不符合需求,以下是修正后的方案:

原代码问题分析

  1. 语法错误:{% tr for %}写法错误,Jinja2的循环标签必须是{% for ... %},不能将HTML标签嵌入模板控制标签内。
  2. 逻辑偏差:原代码循环字典的每个键值对生成单独行,但实际需求是一行包含所有字段,表头对应字典的键,表体对应对应值,且IP列表需要转为逗号分隔的字符串。

修正后的Jinja2模板代码

<table class="s-table">
    <thead>
        <tr>
            <!-- 生成表头:将字典键首字母大写 -->
            {% for key in groups.keys() %}
                <th>{{ key|capitalize }}</th>
            {% endfor %}
        </tr>
    </thead>
    <tbody>
        <tr>
            <!-- 生成表体行:处理不同类型的值 -->
            {% for value in groups.values() %}
                <td>
                    {% if value is iterable and value is not string %}
                        <!-- 列表类型用逗号拼接成字符串 -->
                        {{ value|join(', ') }}
                    {% else %}
                        <!-- 普通字符串/直接值直接输出 -->
                        {{ value }}
                    {% endif %}
                </td>
            {% endfor %}
        </tr>
    </tbody>
</table>

额外说明

如果需要固定列的顺序(比如必须严格按照place→name→IP排列),因为Python 3.7以下的字典不保证插入顺序,可手动指定键的顺序,替换表头和表体的循环:

<thead>
    <tr>
        {% for key in ['place', 'name', 'IP'] %}
            <th>{{ key|capitalize }}</th>
        {% endfor %}
    </tr>
</thead>
<tbody>
    <tr>
        {% for key in ['place', 'name', 'IP'] %}
            <td>
                {% if groups[key] is iterable and groups[key] is not string %}
                    {{ groups[key]|join(', ') }}
                {% else %}
                    {{ groups[key] }}
                {% endif %}
            </td>
        {% endfor %}
    </tr>
</tbody>

内容的提问来源于stack exchange,提问作者Sashaank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:18:21