當我改變文本例如在具有setText()
的文檔中,文檔的內容類型更改爲text/plain
。爲什麼setText()更改文檔的contentType?
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'
的文本由TextField(FileField)
類的_process_input()
處理並猜測它的類型和它的變化。
API是否期望程序員知道_process_input()
的所有猜測?如果是的話,這是否記錄在某處?
似乎沒有「默認」mimetype,但是mimetype是由字段的_process_input來猜測的。看到我的第二個例子,即使它在'invokeFactory'中給出,內容類型也被改變了。另請參閱我的第一個示例,其中內容類型被猜測和更改。這意味着程序員必須知道**如何猜測這些猜測以及他們做出了哪些改變! – wolfrevo
猜測似乎發生在https://github.com/plone/Products.ATContentTypes/blob/2.2.0/Products/ATContentTypes/content/document.py#L137不在文本字段中。在那裏設置一個跟蹤點並調試發生了什麼。 – fRiSi
'guessMimetypeOfText()'僅由'manage_afterAdd()'調用,因此它解釋了在創建和調用'manage_afterAdd()'後的猜測,但'guessMimetypeOfText()'在使用'invokeFactory()'時不會被調用。實際上它是'setText()'(一個'FileField's方法),如果沒有'mimetype'調用,調用'_process_input()' - >'mimetipes.guess_content_type()' - >'mimetipes.guess_type'等並添加'mimetype'回到了kwargs。 – wolfrevo