错误信息
如果 xml 文件(例如视图)无法根据 RELAXNG 架构文件进行验证,则可能会生成“Element odoo 有额外内容:数据”
odoo/odoo/import_xml.rng
。不幸的是它不是很具体。例如这个文件:
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="record_id" model="ir.ui.view">
<field name="name">foo.bar.form</field>
<field name="model">baz.model</field>
<field name="arch" type="xml">
<form string="My Form">
<sheet>
<group>
<field name="my_field"/>
</group>
</sheet>
</form>
</field>
</record>
<act_window id="action_quux" name="My Action" res_model="baz.model" view_model="form"/>
</data>
</odoo>
在验证时会生成消息,但没有迹象表明具体问题是view_model
应该是
view_mode
。有没有办法获得更好的错误消息?
LXML 的 RelaxNG 验证器生成的,而该验证器又依赖于 libxml2。我们可以看到 xmllint,也基于 libxml2
,产生相同的输出:
xmllint path/to/view.xml --relaxng ./odoo/odoo/import_xml.rng
<snip xml file content/>
path/to/view.xml:3: element data: Relax-NG validity error : Element odoo has extra content: data
path/to/view.xml fails to validate
我们无法轻松更改 Odoo 验证 XML 文件的方式,但我们可以安装不同的验证器 安装(在基于 Debian 的系统上):
$ sudo apt-get install jing libbatik-java libavalon-framework-java
安装后,像这样调用它并查看更详细的错误消息(为了便于阅读而格式化):
jing ./odoo/odoo/import_xml.rng path/to/view.xml
path/to/view.xml:23:9: error: attribute "view_model" not allowed here; expected attribute
"auto_refresh", "context", "domain", "groups", "key2", "limit", "multi", "src_model", "target", "usage",
"view_id", "view_mode" or "view_type"
自 Odoo 13 起,Odoo 本身提供了使用 jingtrang 包生成 jing 验证错误消息的可选支持。要启用此支持,请从 pypi 安装 jingtrang 模块。