[MERGE] fix template rendering

bzr revid: chs@openerp.com-20140206163811-i43srg7hd4yqzzo3
This commit is contained in:
Christophe Simonis
2014-02-06 17:38:11 +01:00
2 changed files with 43 additions and 45 deletions
+41
View File
@@ -1,8 +1,12 @@
# -*- coding: utf-8 -*-
import copy
import simplejson
import werkzeug
from lxml import etree, html
from openerp.addons.website.models import website
from openerp.http import request
from openerp.osv import osv, fields
class view(osv.osv):
@@ -117,6 +121,43 @@ class view(osv.osv):
return arch
def render(self, cr, uid, id_or_xml_id, values=None, engine='ir.qweb', context=None):
if request.website_enabled:
engine='website.qweb'
if isinstance(id_or_xml_id, list):
id_or_xml_id = id_or_xml_id[0]
if isinstance(id_or_xml_id, (int, long)):
id_or_xml_id = self.get_view_xmlid(cr, uid, id_or_xml_id)
if not context:
context = {}
qcontext = context.copy()
qcontext.update(
website=request.website,
url_for=website.url_for,
slug=website.slug,
res_company=request.website.company_id,
user_id=self.pool.get("res.users").browse(cr, uid, uid),
editable=False,
)
# add some values
if values:
qcontext.update(values)
# in edit mode ir.ui.view will tag nodes
context['inherit_branding'] = qcontext['editable']
view_obj = request.website.get_template(id_or_xml_id)
if 'main_object' not in qcontext:
qcontext['main_object'] = view_obj
values = qcontext
return super(view, self).render(cr, uid, id_or_xml_id, values=values, engine=engine, context=context)
def save(self, cr, uid, res_id, value, xpath=None, context=None):
""" Update a view section. The view section may embed fields to write
+2 -45
View File
@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
import fnmatch
import inspect
import itertools
import logging
@@ -7,7 +6,6 @@ import math
import re
import urlparse
import simplejson
import werkzeug
import werkzeug.exceptions
import werkzeug.wrappers
@@ -24,17 +22,6 @@ from openerp.addons.web.http import request, LazyResponse
logger = logging.getLogger(__name__)
def keep_query(*args, **kw):
if not args and not kw:
args = ('*',)
params = kw.copy()
query_params = frozenset(werkzeug.url_decode(request.httprequest.query_string).keys())
for keep_param in args:
for param in fnmatch.filter(query_params, keep_param):
if param not in params and param in request.params:
params[param] = request.params[param]
return werkzeug.urls.url_encode(params)
def url_for(path_or_uri, lang=None):
if isinstance(path_or_uri, unicode):
path_or_uri = path_or_uri.encode('utf-8')
@@ -225,7 +212,6 @@ class website(osv.osv):
request.redirect = lambda url: werkzeug.utils.redirect(url_for(url))
request.context.update(
is_master_lang=is_master_lang,
editable=is_website_publisher,
translatable=not is_master_lang,
)
@@ -238,37 +224,8 @@ class website(osv.osv):
return self.pool["ir.ui.view"].browse(cr, uid, view_id, context=context)
def _render(self, cr, uid, ids, template, values=None, context=None):
user = self.pool.get("res.users")
if not context:
context = {}
# Take a context
qweb_values = context.copy()
# add some values
if values:
qweb_values.update(values)
# fill some defaults
qweb_values.update(
request=request,
json=simplejson,
website=request.website,
url_for=url_for,
keep_query=keep_query,
slug=slug,
res_company=request.website.company_id,
user_id=user.browse(cr, uid, uid),
quote_plus=werkzeug.url_quote_plus,
)
qweb_values.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_values:
qweb_values['main_object'] = view
return view.render(qweb_values, engine='website.qweb', context=context)
# TODO: remove this. (just kept for backward api compatibility for saas-3)
return self.pool['ir.ui.view'].render(cr, uid, template, values=values, context=context)
def render(self, cr, uid, ids, template, values=None, status_code=None, context=None):
def callback(template, values, context):