How to override web controller in openerp 8.0.
Here, i try to define one example that may be useful to you to understand how to work with web controller in openerp 8.0.
Existing controller (addons/web/controllers/main.py) :
- class name Home, and method index
class Home(http.Controller):
@http.route('/', type='http', auth="none")
def index(self, s_action=None, db=None, **kw):
return http.local_redirect('/web', query=request.params, keep_hash=True)
Now, here i define how to override existing controller...
- Here, my class name Website, and in parameter i pass path of controller which i want to inherit, so here "Home" class which is in addons/web/controllers/main.py so in path i pass : openerp.addons.web.controllers.main.Home.
- @http.route : in openerp 8.0 the route system changed.
'/' : '/' route will match the new index() method in Website.
'type' : There are different type like http,json...
(http : normal http requests by passing, Json : Methods that received JSON can be defined by passing 'json')
class Website(openerp.addons.web.controllers.main.Home):
@http.route('/', type='http', auth="public", website=True, multilang=True)
def index(self, **kw):
try:
main_menu = request.registry['ir.model.data'].get_object(request.cr, request.uid, 'website', 'main_menu')
first_menu = main_menu.child_id and main_menu.child_id[0]
# Dont 302 loop on /
if first_menu and not ((first_menu.url == '/') or first_menu.url.startswith('/#') or first_menu.url.startswith('/?')):
return request.redirect(first_menu.url)
except:
pass
return self.page("website.homepage")
Here, i try to define one example that may be useful to you to understand how to work with web controller in openerp 8.0.
Existing controller (addons/web/controllers/main.py) :
- class name Home, and method index
class Home(http.Controller):
@http.route('/', type='http', auth="none")
def index(self, s_action=None, db=None, **kw):
return http.local_redirect('/web', query=request.params, keep_hash=True)
Now, here i define how to override existing controller...
- Here, my class name Website, and in parameter i pass path of controller which i want to inherit, so here "Home" class which is in addons/web/controllers/main.py so in path i pass : openerp.addons.web.controllers.main.Home.
- @http.route : in openerp 8.0 the route system changed.
'/' : '/' route will match the new index() method in Website.
'type' : There are different type like http,json...
(http : normal http requests by passing, Json : Methods that received JSON can be defined by passing 'json')
class Website(openerp.addons.web.controllers.main.Home):
@http.route('/', type='http', auth="public", website=True, multilang=True)
def index(self, **kw):
try:
main_menu = request.registry['ir.model.data'].get_object(request.cr, request.uid, 'website', 'main_menu')
first_menu = main_menu.child_id and main_menu.child_id[0]
# Dont 302 loop on /
if first_menu and not ((first_menu.url == '/') or first_menu.url.startswith('/#') or first_menu.url.startswith('/?')):
return request.redirect(first_menu.url)
except:
pass
return self.page("website.homepage")