Odoo Qweb页面调用python方法

Qweb 需要执行后台execute_code 方法:

<a t-attf-href="#{url}">
    <i t-if="menu.sys_menu.web_icon_data" t-attf-style="width: 18px;height: 18px;display: block;border: none;float: left;background-size: 18px;background-repeat: no-repeat;;background-image:url(data:image/png;base64,#{menu.sys_menu.web_icon_data});"/>
    <i t-elif="menu.web_icon_data" t-attf-style="width: 18px;height: 18px;display: block;border: none;float: left;background-size: 18px;background-repeat: no-repeat;;background-image:url(data:image/png;base64,#{menu.web_icon_data})"/>
    <i t-else="" class="icon icon-vip"/>
    <t t-if="menu.code">
        <span t-esc="execute_code(menu.code)"></span>
    </t>

</a>

在control 中增加 参数 'execute_code': self.execute_code, 传在前台。前台就可以调用了

def usercenter(self, **kwargs):
    usercenter_menu = request.env['usercenter.menu'].sudo().search([], order='display_Position,sequence')
    usercenter_menu_used = usercenter_menu
    no_footer = request.params.get('no_footer')
    no_footer = False if no_footer else True
    no_affix_top_menu = request.params.get('no_affix_top_menu')
    no_affix_top_menu = False if no_affix_top_menu else True
    values = {
        'no_footer': no_footer,
        'no_affix_top_menu': no_affix_top_menu,
        'usercenter_menu': usercenter_menu_used,
        'execute_code': self.execute_code,
        'urllib': urllib,
        'centerjscss': True
    }
    return request.render("web_user_center.miancenter", values)

@api.model
def execute_code(self, code_exec):
    localdict = {
        'cr': request.env.cr,
        'uid': request.env.uid,
        'request': request,  # 请求
        'result': None,  # 用于存储返回结果
        '_': _,
    }
    safe_eval(code_exec, localdict, mode="exec", nocopy=True)
    result = localdict['result']
    return result
发布了313 篇原创文章 · 获赞 4 · 访问量 51万+

猜你喜欢

转载自blog.csdn.net/billhepeng/article/details/103577612
今日推荐