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

Qweb遍历Many2many字段添加换行符不生效如何解决?

问题原因
  • HTML规范中,普通的换行符\n不会被浏览器识别为换行标记,默认会将连续空白字符(包括换行、空格、制表符)合并为单个空格显示,所以直接用换行符拼接内容不会出现换行效果。
  • 你使用的t-esc是Odoo QWeb模板的转义输出指令,即使你在拼接内容中加入HTML换行标签<br>,t-esc也会自动将其转义为&lt;br&gt;文本,无法生效为换行。
解决办法

方法1:使用t-raw输出HTML换行标签(适合字段内容可控场景)

直接用<br>作为分隔符拼接,改用t-raw指令输出,该指令不会转义HTML内容:

<span t-raw="'<br>'.join(map(lambda x: x.name, move.myfield_ids))"/>

注意:如果myfield_ids的name字段允许普通用户自由编辑,该方法存在XSS注入风险,更推荐使用方法2。

方法2:QWeb循环渲染(最安全,推荐)

直接遍历Many2many字段的每一项单独输出,每一项后追加换行标签:

<span t-foreach="move.myfield_ids" t-as="field_item">
    <span t-esc="field_item.name"/><br/>
</span>

该方法使用t-esc输出每个字段值,自动转义特殊字符,无安全风险,代码可读性也更高。

方法3:保留换行符+CSS适配

如果需要保留换行符而非使用HTML标签,可以给外层元素添加white-space: pre-line样式,告诉浏览器识别内容中的换行符:

<span style="white-space: pre-line;" t-esc="'&#10;'.join(map(lambda x: x.name, move.myfield_ids))"/>

其中&#10;是换行符的HTML实体写法,也可以直接替换为\n。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:15:03