summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Dony <odo@openerp.com>2016-07-01 15:43:02 +0200
committerOlivier Dony <odo@openerp.com>2016-07-01 18:09:32 +0200
commit8d8f1bdb6a48db1da486fa093477b0f928a0d9d9 (patch)
tree7462403d410712e8741288d3474be9955cd23b20
parent2f3b32c676354f428337b34eeaf9106f09ff2dca (diff)
[FIX] ir.qweb: `t-lang` had no effect anymore, e.g. when printing reports
Setting the env of the qwebcontext is not sufficient because the closure of the `loader` carries its own contexts and lang, so subsequent t-calls may still use the original language. This was broken by the new API conversion at commit 4ddc32313996c8cf6e8e6dffd2253aad8a144ccf, and further broken by the forward-port 6c8141a1dfa9fa44067d052b368e3851972d836cA with a wrongly indented line.
-rw-r--r--openerp/addons/base/ir/ir_qweb.py6
-rw-r--r--openerp/addons/base/ir/ir_ui_view.py5
2 files changed, 7 insertions, 4 deletions
diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py
index 1b1b374790f..c981bd54a1c 100644
--- a/openerp/addons/base/ir/ir_qweb.py
+++ b/openerp/addons/base/ir/ir_qweb.py
@@ -75,7 +75,7 @@ class FileSystemLoader(object):
if name:
yield name
- def __call__(self, name):
+ def __call__(self, name, env=None):
for node in self.doc:
if node.get('t-name') == name:
root = etree.Element('templates')
@@ -161,7 +161,7 @@ class QWeb(models.AbstractModel):
def get_template(self, name, qwebcontext):
origin_template = qwebcontext.get('__caller__') or qwebcontext['__stack__'][0]
try:
- document = qwebcontext.loader(name)
+ document = qwebcontext.loader(name, env=qwebcontext.env)
except ValueError:
raise_qweb_exception(QWebTemplateNotFound, message="Loader could not find template %r" % name, template=origin_template)
@@ -439,7 +439,7 @@ class QWeb(models.AbstractModel):
lang_eval = lang
lang = qwebcontext.get('res_company') and qwebcontext['res_company'].partner_id.lang or 'en_US'
_logger.info("'%s' is not a valid language code, is an empty field or is not installed, falling back to %s", lang_eval, lang)
- d.env = d.env(context=dict(d.context, lang=lang))
+ d.env = d.env(context=dict(d.context, lang=lang))
d[0] = self.render_element(element, template_attributes, generated_attributes, d)
diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py
index ff8e3656bfa..843c5ad3400 100644
--- a/openerp/addons/base/ir/ir_ui_view.py
+++ b/openerp/addons/base/ir/ir_ui_view.py
@@ -1028,7 +1028,10 @@ actual arch.
return '[]'
qcontext['get_modules_order'] = get_modules_order
- return self.env[engine].render(self.id, qcontext, loader=self.read_template)
+ def loader(name, env=self.env):
+ return self.with_env(env).read_template(name)
+
+ return self.env[engine].render(self.id, qcontext, loader=loader)
#------------------------------------------------------
# Misc