[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
4ddc323139,
and further broken by the forward-port
6c8141a1dfa9fa44067d052b368e3851972d836cA with a wrongly indented line.
This commit is contained in:
Olivier Dony
2016-07-01 18:09:32 +02:00
parent 2f3b32c676
commit 8d8f1bdb6a
2 changed files with 7 additions and 4 deletions
+3 -3
View File
@@ -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)
+4 -1
View File
@@ -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