6

ニュース記事のコンテンツを、私が書いた別のコンテンツ タイプにコピーしようとしています。私のスクリプトには、newsアイテムとアイテムがありprojectます。2 番目の はproject、Dexterity を使用して定義されたコンテンツ タイプです。newsからの画像と本文を次のようにコピーできれば素晴らしいですproject

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

テキストと画像はprojectスキーマで RichText と NamedBlobImage として定義されています。属性がニュース項目にどのように含まれているかわかりません。メソッドを使用してニュース項目の画像を取得できることだけは知っていますgetImage()が、それをプロジェクトに割り当てると、プロジェクトのレンダリング時にエラーが発生します。

したがって、基本的な質問を解決するには、いくつかの指針が必要です。

  1. Archetype コンテンツ タイプの属性名を知るにはどうすればよいですか。たとえば、この場合、ニュース アイテムの本文の属性の名前を知る必要があります。

  2. ニュース項目に添付された画像を、器用さのコンテンツ タイプに添付された画像に変換するにはどうすればよいですか。

4

1 に答える 1

6
  1. 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)
    
  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 に答える