2

我有一个带有 3 个文件字段(plone.app.blob.field.FileField)的自定义内容类型,我想获取他们的 url,所以我可以将它们放在我的自定义视图中,人们将能够下载这些文件。但是,当使用 Clouseau 进行测试和调试时,我调用:

context.getFirst_file().absolute_url()

其中 getFirst_file() 是第一个文件的访问器(名为“first_file”的字段)。

返回的 url 是“http://foo/.../eat.00001”,其中“eat.00001”是我的自定义类型的对象,其中包含文件字段...

有趣的是,如果我打电话:

context.getFirst_file().getContentType()

它返回“application/pdf”,这是正确的,因为它是一个 pdf 文件。

我在这里很迷茫,感谢您的帮助。提前致谢!

4

1 回答 1

4

文件字段不支持absolute_url方法;相反,通过获取,您可以从对象本身继承方法,因此您会看到结果。此外,调用getFirst_field()将返回该字段的实际可下载内容,而不是可以提供此类信息的字段本身。

相反,您应该使用at_download附加到对象 URL 的脚本,后跟字段 id:

<a href="" tal:attributes="href string:${context/absolute_url}/at_download/first_file">First File</a>

您还可以通过将字段名称传递给方法来重新使用该字段的 Archetypes 小部件widget

<metal:field use-macro="python:context.widget('first_field', mode='view')">
  First File
</metal:field>

这将显示文件大小、图标(如果可用)、文件名和文件 mime 类型。

在这两个示例中,我假设字段的名称是“first_field”。

于 2011-11-16T20:39:56.663 回答