Plone 4 - 获取 plone.app.blob.field.FileField 中文件的 url

发布于 2024-12-15 19:22:52 字数 513 浏览 3 评论 0原文

我有一个包含 3 个 FileFields (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 文件。

我在这里很迷路,非常感谢任何帮助。提前致谢!

I have a custom content type with 3 FileFields (plone.app.blob.field.FileField) and I want to get their url's, so i can put them on my custom view and people will be able to download these files.
However, when using Clouseau to test and debug, I call :

context.getFirst_file().absolute_url()

Where getFirst_file() is the accessor to the first file (field called 'first_file').

The url returned is 'http://foo/.../eat.00001', where 'eat.00001' is the object of my custom type that contains the file fields...

The interesting thing is, if I call:

context.getFirst_file().getContentType()

It returns 'application/pdf', which is correct since it's a pdf file.

I'm pretty lost here, any help is appreciated. Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

闻呓 2024-12-22 19:22:52

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

相反,您应该使用附加到对象 URL 的 at_download 脚本,后跟字段 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”。

File fields do not support a absolute_url method; instead, through acquisition you inherit the method from the object itself, hence the results you see. Moreover, calling getFirst_field() will return the actual downloadable contents of the field, not the field itself which could provide such information.

Instead, you should use the at_download script appended to the object URL, followed by the field id:

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

You can also re-use the Archetypes widget for the field, by passing the field name to the widget method:

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

This will display the file size, icon (if available), the filename and the file mime type.

In both these examples, I assumed the name of the field is 'first_field'.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文