- 上传者: Administrator
- 上传时间:2024年02月24日 03时07分59秒
In Odoo, web controllers are a class that can be used to connect the front end with the backend models. If we need to render some data from the backen ......
In Odoo, web controllers are a class that can be used to connect the front end with the backend models. If we need to render some data from the backend model to the website, we can use the Controllers in such scenarios
For creating a web controller, initially, we need to create a directory called “Controllers” with __init__.py and a python file inside our custom module.
For Instance, let’s create a controller that fetches data from res. partner model and pass to a web page.
from odoo import http, _
from odoo.http import request
class ResPartnerController(http.Controller):
@http.route('/contacts', type='http', auth='public', website=True)
def contact_details(self, **kwargs):
partner_data = request.env['res.partner'].sudo().search([])
values = {
'partners': partner_data,
}
return request.render("library_management.contact_details_template", values)
The Controllers in Odoo are actually inherited from the “Controller” class, as you can see from the above code. The ‘ ‘@http.route()’ defined in the controller specifies some details like the url of the page that need to be redirected, the type of the request (can be http or json), auth for specifying who can access the url, website parameter for specifying the controller is linked with a page (it will take either True or False values).
Lastly, in the controller function definition, using request.render(), we can specify the template that needs to be rendered when redirecting to the specified URL.
Then, we can create the XML file for creating the template specified in the controller.
<odoo>
<record id="contact_menu" model="website.menu">
<field name="name">Contacts</field> <!-- Name of the menu-->
<field name="url">/contacts</field>
<field name="parent_id" ref="website.main_menu"/>
</record>
<template id="contact_details_template" name="Contact Details">
<t t-call="website.layout">
<div class="oe_structure">
<div class="container">
<br/>
<center>
<h3>Contact Details</h3>
</center>
<br/>
<table class="table-striped table">
<thead style="font-size: 23px;">
<tr>
<h6>
<b>
<th>Name</th>
<th>Mobile</th>
<th>Email</th>
<th>Job Position</th>
</b>
</h6>
</tr>
</thead>
<tbody>
<t t-foreach="partners" t-as="partner">
<tr>
<td>
<span t-esc="partner.name"/>
</td>
<td>
<span t-esc="partner.mobile"/>
</td>
<td>
<span t-esc="partner.email"/>
</td>
<td>
<span t-esc="partner.function"/>
</td>
</tr>
</t>
</tbody>
</table>
</div>
</div>
</t>
</template>
</odoo>
This is how we can create a new controller in Odoo 16.
In Odoo, it's also possible to inherit an already existing controller. For Instance, if we need to override the controller “CustomerPortal” defined by the “portal” module,
First need to import the controller class like below,
from odoo.addons.portal.controllers.portal import CustomerPortal
Here the “portal” is the controller file where the “CustomerPortal” Controller class is defined. After importing the controller, we can override the function like below,
class CustomerPortalPasswordPolicy(CustomerPortal):
def _prepare_portal_layout_values(self):
d = super()._prepare_portal_layout_values()
d['password_minimum_length'] = request.env['ir.config_parameter'].sudo().get_param('auth_password_policy.minlength')
return d
This is how we can create and override a controller in Odoo 16
本文章从网上收集,如有侵权请联系tderp@tderp.com删除- 微信扫一扫,一分也是爱:
服务原则及地区范围
宜兴通达网络科技有限公司,地处中国宜兴环科园内,是一家高新技术企业。公司在企业网络维护和企业信息化建设与咨询方面,有10多年经验。
我公司愿与客户一道,力求彻底解决客户问题!
我们不是在给企业提供“头痛医头、脚痛医脚”的暂时解决方案,而是在部署根本性安全与稳定服务!!
我们愿携手客户,建立企业IT规划;杜绝随意安装系统、软件等操作;力求共同维护有序、安全、稳定的网络办公环境!!!
IT服务,服务是根本,客户是上帝;我们提供快速响应、快速上门、快速排查,提供优质高效的服务!!!!
通达科技提供全国范围内的服务,服务形式包括远程协助、电话咨询、电子邮件咨询、传真咨询、问答平台的问题解决等。
宜兴地区提供上门服务:
- 市区服务:宜城街道、城北街道(屺亭街道)、新街街道、新庄街道、环科园、渚桥开发区
- 市郊服务:张渚镇、西渚镇、太华镇、徐舍镇、官林镇、杨巷镇、新建镇、和桥镇、高塍镇、万石镇、周铁镇、芳桥镇、丁蜀镇、湖父镇。