我正在尝试将新闻项目中的内容复制到我编写的其他内容类型中。在我的脚本中,我有news
项和project
项。第二个project
是使用Dexterity定义的内容类型。如果我能够以下一种方式将图像和正文从news
复制到project
,那就太棒了。
project.text = news.text
project.image = news.image
在project
架构中将文本和图像定义为RichText和NamedBlobImage。我不知道新闻项中的属性如何。我只知道我可以使用方法getImage()
在新闻项中获取图像,但是在项目渲染时将其分配给项目会产生错误。
所以我需要一些指导来解决我的基本问题:
如何知道Archetype内容类型的属性名称。例如,在这种情况下,我需要知道新闻项正文的属性名称。
如何将附加到新闻项目的图像转换为附加到灵巧内容类型的图像。
答案 0 :(得分:6)
您可以使用Archetypes架构中的字段来检索值,在这种情况下最好是原始值。您传入对象,然后调用.get()
或.getRaw()
:
schema = news.Schema()
news = schema.getField('text').getRaw(news)
imageField = schema.getField('image')
image = imageField.getRaw(news)
content_type = imageField.getContentType(news)
filename = imageField.getFilename(news)
ImageField.getRaw()
调用返回的对象基本上是OFS.Image
个实例。您可以在其上调用str()
以获取原始图像数据。
要设置图像对象,您确实希望从架构中获取图像字段并将其._type
属性用作工厂:
project.image = IProjectInterface.image._type(str(image),
contentType=content_type, filename=filename)
此处的内容类型是可选的; NamedImage
和NamedBlobImage
类型也会自动嗅出内容类型。