我有一个自定义的内容类型与3 FileFields (plone.app.blob.field.FileField),我想得到他们的url,所以我可以把它们放在我的自定义视图和人们将能够下载这些文件。然而,当使用Clouseau进行测试和调试时,我调用:
context.getFirst_file().absolute_url()
其中getFirst_file()是第一个文件(名为'first_file'的字段)的访问器。
返回的url是'http://foo/.../eat '。00001',在哪里吃。00001'是我的自定义类型的对象,包含文件字段…
有趣的是,如果我调用:context.getFirst_file().getContentType()
它返回'application/pdf',这是正确的,因为它是一个pdf文件。
我在这里迷路了,任何帮助都很感激。提前感谢!
文件字段不支持absolute_url
方法;相反,通过获取,您可以从对象本身继承方法,从而获得您看到的结果。此外,调用getFirst_field()
将返回字段的实际可下载内容,而不是可以提供此类信息的字段本身。
相反,您应该使用at_download
脚本附加到对象URL,后面跟着字段id:
<a href="" tal:attributes="href string:${context/absolute_url}/at_download/first_file">First File</a>
您还可以通过将字段名称传递给widget
方法来重用字段的Archetypes小部件:
<metal:field use-macro="python:context.widget('first_field', mode='view')">
First File
</metal:field>
这将显示文件大小,图标(如果可用),文件名和文件mime类型。
在这两个例子中,我假设字段的名称是'first_field'