为什么setText()会更改文档的内容类型?

时间:2014-03-03 14:03:24

标签: plone

当我更改文字时,例如在包含setText()的文档中,文档的内容类型更改为text/plain

In [1]: app.Plone.invokeFactory('Document', 'doc')
Out[1]: 'doc'

In [2]: app.Plone.doc.getContentType()
Out[2]: 'text/html'

In [3]: app.Plone.doc.setText('xyz'); app.Plone.doc.getContentType()
Out[3]: 'text/plain'

In [4]: app.Plone.doc.setText('<abc>xyz</abc>'); app.Plone.doc.getContentType()
Out[4]: 'text/html'

即使我创建了一个文档并将mimetype明确设置为text/plain,它也会将类型更改为text/html

In [1]: app.Plone.invokeFactory('Document', 'doc', 
                                 text='<abc>xyz</abc>', 
                                 mimetype='text/plain')
Out[1]: 'doc'

In [2]: app.Plone.doc.getContentType()
Out[2]: 'text/html'

文本由_process_input()类的TextField(FileField)处理,并猜测类型并对其进行更改。

API是否希望程序员知道_process_input()的所有猜测?如果是的话,这是在某处记录的吗?

1 个答案:

答案 0 :(得分:2)

我猜您的doument是ATContentTypes文档。

在这种情况下,除非在setText中给出了特定的mimetype,否则将使用默认的mimetype:

doc.setText(u"<p>your text</p>", mimetype='text/html')

请参阅https://github.com/plone/Products.ATContentTypes/blob/2.2.0/Products/ATContentTypes/content/document.py#L112

对于上传的文档,mimetype被猜到了 https://github.com/plone/Products.ATContentTypes/blob/2.2.0/Products/ATContentTypes/content/document.py#L137