Plone 5:敏捷内容类型不提供IContentType

时间:2017-03-26 19:55:21

标签: plone dexterity

我创建了一个Dexterity内容类型并定义了一个简单的模式:

....
....
class IMyType(model.Schema):
    myField = schema.TextLine(
            title=_(u"My Field:"),
        )
....
....

在Plone 4.3下,Dexterity内容类型提供IContentType。但是,在Plone 5.0.6下,似乎Dexterity内容类型不提供IContentType,因此queryContentType(IMyType)返回' None'。

此外:

IContentType.providedBy(IMyType)

返回'错误'。

尝试使用默认内容类型也会产生相同的否定结果。

显然,对于我的自定义内容类型,可以按如下方式解决:

....
from zope.interface import alsoProvides
....
class IMyType(model.Schema):
    myField = schema.TextLine(
            title=_(u"My Field:"),
        )

alsoProvides(IMyType, IContentType)

queryContentType(IMyType)现在返回预期的架构,IContentType.providedBy(IMyType)返回' True'。

但是,我希望所有Dexterity内容类型自动提供IContentType。 我是否期望太多,或者这是plone.dexterity和/或Plone 5.x中的错误?

2 个答案:

答案 0 :(得分:1)

plone.dexterity 2.0+在zope.app.content上只有一个“软依赖”,你的构建没有安装它。如果您将zope.app.content添加到setup.py install_requires并在buildout中固定版本(3.5.1),则您的加载项可以在内容类型接口上提供所需的界面。如果这样做,所有内容类型架构/接口类都将提供IContentType。

答案 1 :(得分:0)

很抱歉我迟到的回复。我之所以需要这个,是因为我创建了一个CSV / PDF导出实用程序,用户可以根据需要导出对象。出于这个原因,我需要获取内容类型的模式以创建CSV文件的标题行并填充表。在我的Plone 4.3网站中,我通过以下方式做到了这一点:

#include<stdio.h>
int main(){
char ch='"';
printf("%c",ch);
return 0;
}

仅当对象提供IContentType并且因此需要zope.app.content时才有效。 请参阅https://docs.plone.org/external/plone.app.dexterity/docs/reference/manipulating-content-objects.html#object-introspection

更新文档可能会有所帮助,表明zope.app.content不再是开箱即用的。如果有更新的方法来获取不需要zope.app.content的对象架构,请告诉我!

干杯,

埃里克