[FIX] qweb: handle unicode tags and attributes

closes #8895
This commit is contained in:
Xavier Morel 2015-11-19 14:59:44 +01:00
parent b665478fa7
commit c6d6ae8aec
2 changed files with 14 additions and 5 deletions

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<templates>
<t t-name="fixed-literal">
<Año t-att-falló="'agüero'"/>
</t>
<result id="fixed-literal"><![CDATA[<Año falló="agüero"></Año>]]></result>
</templates>

View File

@ -116,8 +116,9 @@ class QWeb(orm.AbstractModel):
_name = 'ir.qweb' _name = 'ir.qweb'
_void_elements = frozenset([ _void_elements = frozenset([
'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', u'area', u'base', u'br', u'col', u'embed', u'hr', u'img', u'input',
'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr']) u'keygen', u'link', u'menuitem', u'meta', u'param', u'source',
u'track', u'wbr'])
_format_regex = re.compile( _format_regex = re.compile(
'(?:' '(?:'
# ruby-style pattern # ruby-style pattern
@ -266,7 +267,7 @@ class QWeb(orm.AbstractModel):
t_render = None t_render = None
template_attributes = {} template_attributes = {}
for (attribute_name, attribute_value) in element.attrib.iteritems(): for (attribute_name, attribute_value) in element.attrib.iteritems():
attribute_name = str(attribute_name) attribute_name = unicode(attribute_name)
if attribute_name == "groups": if attribute_name == "groups":
cr = qwebcontext.get('request') and qwebcontext['request'].cr or None cr = qwebcontext.get('request') and qwebcontext['request'].cr or None
uid = qwebcontext.get('request') and qwebcontext['request'].uid or None uid = qwebcontext.get('request') and qwebcontext['request'].uid or None
@ -325,7 +326,7 @@ class QWeb(orm.AbstractModel):
except Exception: except Exception:
template = qwebcontext.get('__template__') template = qwebcontext.get('__template__')
raise_qweb_exception(message="Could not render element %r" % element.tag, node=element, template=template) raise_qweb_exception(message="Could not render element %r" % element.tag, node=element, template=template)
name = str(element.tag) name = unicode(element.tag)
inner = "".join(g_inner) inner = "".join(g_inner)
trim = template_attributes.get("trim", 0) trim = template_attributes.get("trim", 0)
if trim == 0: if trim == 0:
@ -344,7 +345,7 @@ class QWeb(orm.AbstractModel):
for qwebcontext in (name, generated_attributes, inner, name) for qwebcontext in (name, generated_attributes, inner, name)
) )
else: else:
return "<%s%s/>" % (name, generated_attributes) return "<%s%s/>" % (name.encode("utf-8"), generated_attributes)
def render_attribute(self, element, name, value, qwebcontext): def render_attribute(self, element, name, value, qwebcontext):
return _build_attribute(name, value) return _build_attribute(name, value)