From 03606aa347f90333136e5a5fe35d17bc72a9cf44 Mon Sep 17 00:00:00 2001 From: Jojo le bricolo <> Date: Sun, 19 Jan 2014 18:46:42 +0100 Subject: [PATCH] QWeb cleanups 1 sql query less per page bzr revid: jojo_le_bricolo-20140119174642-q2ix8p27ospjkuf4 --- addons/website/controllers/main.py | 13 +++++++-- addons/website/models/website.py | 46 +++++++++++------------------- 2 files changed, 27 insertions(+), 32 deletions(-) diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 2ebdc2ba163..0120545a8bc 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -29,6 +29,7 @@ logger = logging.getLogger(__name__) NOPE = object() # Completely arbitrary limits MAX_IMAGE_WIDTH, MAX_IMAGE_HEIGHT = IMAGE_LIMITS = (1024, 768) + class Website(openerp.addons.web.controllers.main.Home): @website.route('/', type='http', auth="public", multilang=True) def index(self, **kw): @@ -90,13 +91,21 @@ class Website(openerp.addons.web.controllers.main.Home): values = { 'path': page, } + # allow shortcut for /page/ + if '.' not in page: + page = 'website.%s' % page + try: - request.website.get_template(page) - except (Exception), e: + module, xmlid = page.split('.', 1) + model, view_id = request.registry["ir.model.data"].get_object_reference(request.cr, request.uid, module, xmlid) + values['main_object'] = request.registry["ir.ui.view"].browse(request.cr, request.uid, view_id, context=request.context) + except ValueError, e: + # page not found if request.context['editable']: page = 'website.page_404' else: return request.registry['ir.http']._handle_exception(e, 404) + return request.website.render(page, values) @website.route('/website/reset_templates', type='http', auth='user', methods=['POST']) diff --git a/addons/website/models/website.py b/addons/website/models/website.py index ccdfe449617..9dc4ea61744 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -101,7 +101,7 @@ class website(osv.osv): def _get_menu_website(self, cr, uid, ids, context=None): # IF a menu is changed, update all websites return self.search(cr, uid, [], context=context) - + def _get_menu(self, cr, uid, ids, name, arg, context=None): root_domain = [('parent_id', '=', False)] menus = self.pool.get('website.menu').search(cr, uid, root_domain, order='id', context=context) @@ -178,9 +178,7 @@ class website(osv.osv): page = self.page_for_name(cr, uid, ids, name, module=module, context=context) try: - return self.get_template( - cr, uid, ids, template=page, context=context - ).exists() + self.pool["ir.model.data"].get_object_reference(cr, uid, module, name) except: return False @@ -193,6 +191,7 @@ class website(osv.osv): def _get_languages(self, cr, uid, id, context=None): website = self.browse(cr, uid, id) return [(lg.code, lg.name) for lg in website.language_ids] + def get_languages(self, cr, uid, ids, context=None): return self._get_languages(cr, uid, ids[0]) @@ -218,28 +217,19 @@ class website(osv.osv): translatable=not is_master_lang, ) - def get_template(self, cr, uid, ids, template, context=None): - IMD = self.pool["ir.model.data"] - try: - module, xmlid = template.split('.', 1) - model, id = IMD.get_object_reference(cr, uid, module, xmlid) - except ValueError: # catches both unpack errors and gor errors - module, xmlid = 'website', template - model, id = IMD.get_object_reference(cr, uid, module, xmlid) - return self.pool["ir.ui.view"].browse(cr, uid, id, context=context) - def _render(self, cr, uid, ids, template, values=None, context=None): user = self.pool.get("res.users") if not context: context = {} - qweb_context = context.copy() - + # Take a context + qweb_values = context.copy() + # add some values if values: - qweb_context.update(values) - - qweb_context.update( - request=request, # TODO maybe rename to _request to mark this attribute as unsafe + qweb_values.update(values) + # fill some defaults + qweb_values.update( + request=request, json=simplejson, website=request.website, url_for=url_for, @@ -248,17 +238,12 @@ class website(osv.osv): user_id=user.browse(cr, uid, uid), quote_plus=quote_plus, ) + qweb_values.setdefault('editable', False) - context.update( - inherit_branding=qweb_context.setdefault('editable', False), - ) + # in edit mode ir.ui.view will tag nodes + context['inherit_branding']=qweb_values['editable'] - view = self.get_template(cr, uid, ids, template) - - if 'main_object' not in qweb_context: - qweb_context['main_object'] = view - #context['debug'] = True - result = view.render(qweb_context, engine='website.qweb', context=context) + result = self.pool['ir.ui.view'].render(cr, uid, template, qweb_values, engine='website.qweb', context=context) return result def render(self, cr, uid, ids, template, values=None, status_code=None, context=None): @@ -513,7 +498,6 @@ class website(osv.osv): html += request.website._render(template, {'object_id': object_id}) return html - class website_menu(osv.osv): _name = "website.menu" _description = "Website Menu" @@ -669,3 +653,5 @@ class SeoMetadata(osv.Model): 'website_meta_description': fields.text("Website meta description", size=160, translate=True), 'website_meta_keywords': fields.char("Website meta keywords", translate=True), } + +# vim:et: