在ODOO 11中的qweb模板中使用像math.ceil这样的python模块

时间:2018-05-18 09:55:13

标签: odoo

<xpath expr="//*[@id='wrap']/section[2]/div" position="replace">
    <t t-set="Math" t-value="math"/>
    <t t-foreach="range(0, Math.ceil(number_of_device_issue/2))" t-as="num">
    <t t-esc="num"/>
</t>

错误:'NoneType'对象没有属性'ceil' Traceback(最近一次调用最后一次):   在_compiled_fn中输入文件“/home/sachin/Documents/ODOO_11/sources/odoo11-1104/odoo/addons/base/ir/ir_qweb/qweb.py”,第341行     return编译(self,append,new,options,log)   在template_336_8中的文件“”,第1行   文件“”,第2行,在body_call_content_7中 AttributeError:'NoneType'对象没有属性'ceil'

呈现编译AST时出错 AttributeError:'NoneType'对象没有属性'ceil' 模板:336 路径:/ templates / t / t / div / section [2] / t [2] 节点:<t t-foreach="range(0, Math.ceil(number_of_device_issue/2))" t-as="num"> <t t-esc="num"/> </t>

2 个答案:

答案 0 :(得分:1)

Odoo Reports(对于html和pdf)实际上是渲染视图(类型为QWeb)。此类视图的模型为this.listProperties = this.listProperties.bind(this); 。您将在ir.ui.view模块中找到render方法。看here

base

有趣的部分是@api.multi def render(self, values=None, engine='ir.qweb'): assert isinstance(self.id, (int, long)) qcontext = dict( env=self.env, keep_query=keep_query, request=request, # might be unbound if we're not in an httprequest context debug=request.debug if request else False, json=json, quote_plus=werkzeug.url_quote_plus, time=time, datetime=datetime, relativedelta=relativedelta, xmlid=self.key, ) qcontext.update(values or {}) return self.env[engine].render(self.id, qcontext) ,它可以在渲染QWeb模板时使用一些python库。所以只需继承/扩展模型qcontext并覆盖/扩展ir.ui.view

编辑:我的例子是Odoo v10。

答案 1 :(得分:1)

在qweb中不允许使用外部lib函数,因为您必须在使用前在上下文中导入这些库。所以你应该把这些值从控制器中评估出来,或者写下这里的逻辑是qweb,因为ceil()没有任何复杂的逻辑。