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
相关产品推荐
相关产品推荐

