6

我正在尝试将新闻项目中的内容复制到我编写的其他内容类型。在我的脚本中,我有news项目和project项目。第二个,project是使用 Dexterity 定义的内容类型。如果我能以下一种方式将图像和正文从newsto复制出来,那就太好project了。

project.text = news.text
project.image = news.image

其中文本和图像在project架构中定义为 RichText 和 NamedBlobImage。我不知道新闻项目中的属性如何。我只知道我可以使用该方法获取新闻项中的图像,getImage()但是将其分配给项目会在渲染项目时产生错误。

所以我需要一些指针来解决我的基本问题:

  1. 我如何知道 Archetype 内容类型的属性名称。例如,在这种情况下,我需要知道新闻项目正文的属性名称。

  2. 如何将附加到新闻项目的图像转换为附加到灵巧内容类型的图像。

4

1 回答 1

6
  1. 您使用 Archetypes 模式中的字段来检索值,在这种情况下最好是原始值。您传入对象,然后调用.get()or .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)
    
  2. 调用返回的对象ImageField.getRaw()基本上是一个OFS.Image实例。您可以调用str()它来获取原始图像数据。

    设置图像对象,您真的想从模式中获取图像字段并将其._type属性用作工厂:

    project.image = IProjectInterface.image._type(str(image),
        contentType=content_type, filename=filename)
    

    这里的内容类型是可选的;和类型NamedImage也会NamedBlobImage自动嗅出内容类型。

于 2013-03-28T21:42:40.957 回答