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

如何避免Odoo 15中因缺失键值导致的模板渲染错误

Odoo 15模板缺失字典键的KeyError解决思路

针对你遇到的字典缺失键导致模板渲染500错误的问题,除了补全后端返回的所有键,还有以下几种可行的前端模板层面的解决方法:

方法1:使用字典get()方法(最简洁)

直接用字典的get()方法替代键取值,该方法允许指定默认值,当键不存在时会返回默认值而非抛出KeyError。

修改模板中的取值代码:

<td><t t-esc="row.get('Brouillon', 0)"/></t>
<!-- 或者需要空显示的话用空字符串 -->
<td><t t-esc="row.get('Brouillon', '')"/></t>

其他缺失键的字段(比如Qualification)也可以用同样方式处理,根据业务需求设置合适的默认值(0、空字符串等)。

方法2:用t-if判断键是否存在

通过t-if检查当前行字典中是否包含目标键,存在则渲染对应值,不存在则渲染默认内容。

示例代码:

<td>
    <t t-if="'Brouillon' in row">
        <t t-esc="row['Brouillon']"/>
    </t>
    <t t-else="">
        0 <!-- 或空内容 -->
    </t>
</td>

注意判断条件的写法是'键名' in row,不要写错语法。

方法3:模板内统一处理行数据

如果需要处理多个缺失键的字段,可以在遍历行数据时,先统一补全所有必要键的默认值,再使用处理后的字典渲染内容,减少重复代码。

示例代码:

<t t-foreach="PRI_par_DSP_par_stage" t-as="row">
    <!-- 补全所有需要的键,默认值根据业务设置 -->
    <t t-set="processed_row" t-value="dict(
        row,
        Brouillon=row.get('Brouillon', 0),
        Qualification=row.get('Qualification', 0),
        Closing=row.get('Closing', 0)
    )"/>
    <tr>
        <td><t t-esc="processed_row['dsp_id']"/></td>
        <td><t t-esc="processed_row['Brouillon']"/></td>
        <td><t t-esc="processed_row['Qualification']"/></td>
        <td><t t-esc="processed_row['Closing']"/></td>
    </tr>
</t>

这种方式适合字段较多的场景,只需要处理一次,后续直接使用processed_row即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:00:35