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

Odoo 11 如何将数组从控制器传递到QWeb模板并完成遍历

问题根因

你在控制器中传递的projects是字典类型而非数组,QWeb遍历字典时默认迭代的是字典的键(也就是你存入的active_project.id值),而非你存储的项目属性对象,因此无法直接取到name和hours属性。同时你模板中的变量输出写法也不符合QWeb语法规范。

解法1:调整控制器,改为传递数组(更推荐)

把控制器中的字典结构替换为列表结构,代码修改如下:

# 原来的return_projects = {} 改为列表定义
return_projects = []

for active_project in active_projects:
    hours = 0
    for analytic_line in active_project.line_ids:
        hours += analytic_line.unit_amount
    # 直接追加项目属性对象到列表,不需要id作为键
    return_projects.append({
        "name": active_project.display_name,
        "hours": hours
    })

return http.request.render('mymodule_briefing.crm_page', {
    'projects': return_projects,
})

对应模板修改为:

<t t-foreach="projects" t-as="project">
    <t t-esc="project.name"/>
    <t t-esc="project.hours"/>
</t>

解法2:不修改控制器,调整模板遍历逻辑

如果你需要保留控制器的字典结构,可以直接遍历字典的values()方法获取所有项目属性对象,模板修改如下:

<t t-foreach="projects.values()" t-as="project">
    <t t-esc="project.name"/>
    <t t-esc="project.hours"/>
</t>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:06:03