QWeb cleanups 1 sql query less per page

bzr revid: jojo_le_bricolo-20140119174642-q2ix8p27ospjkuf4
This commit is contained in:
Jojo le bricolo 2014-01-19 18:46:42 +01:00
parent a571dd0849
commit 03606aa347
2 changed files with 27 additions and 32 deletions

View File

@ -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/<website_xml_id>
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'])

View File

@ -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: