Plone 为什么getSite()返回FormlibValidation对象

Plone 为什么getSite()返回FormlibValidation对象,plone,kss,Plone,Kss,我已经在一个空白的Plone 4.1站点上安装了collective.quickupload, 并注意到,当您添加quickupload portlet时,kss调用字段验证(plone.app.form.kss),getSite函数将返回FormlibValidation对象,这将导致quickupload词汇表崩溃 回溯如下: 我的问题是: 这(getSite函数返回FormlibValidation对象)是错误还是预期行为 修复/解决/使collective.quickupload工作的

我已经在一个空白的Plone 4.1站点上安装了collective.quickupload, 并注意到,当您添加quickupload portlet时,kss调用字段验证(plone.app.form.kss),getSite函数将返回FormlibValidation对象,这将导致quickupload词汇表崩溃

回溯如下:

我的问题是:

  • 这(getSite函数返回FormlibValidation对象)是错误还是预期行为

  • 修复/解决/使collective.quickupload工作的解决方案

getSite()返回最近的组件站点(本地实用程序可以存储在其中),这实际上只是指上一次使用setSite()设置的内容,这通常发生在遍历时

大多数情况下,唯一调用setSite()的遍历钩子是当您遍历Plone站点时触发的钩子。但我认为旧的KSS内联表单验证机制使用了(使用?)一种黑客技术,它可以动态(在视图中)创建本地组件站点,并在请求的其余部分将其设置为本地站点,以便它可以覆盖某些内容


您可以禁用验证(例如,禁用portal_KSS中的相关KSS文件)或修复c.quickupload以检查getSite()的结果是否为ISiteRoot。如果不是,则应该对其进行采集包装,因此您可以执行aq_parent(site)(或者site.parent)将父对象放入循环中,直到找到ISiteRoot为止。

谢谢Martin,我最终禁用了KSS验证。这个错误也影响了重氮主题化。