Plone 4 - Получить URL-адрес файла в plone.app.blob.field.FileField - PullRequest
2 голосов
/ 16 ноября 2011

У меня есть пользовательский тип контента с 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-файл.

Я довольно потерян, любая помощь приветствуется.Заранее спасибо!

1 Ответ

4 голосов
/ 17 ноября 2011

Поля файла не поддерживают метод absolute_url; вместо этого через приобретение вы наследуете метод от самого объекта, отсюда и результаты, которые вы видите. Более того, вызов getFirst_field() вернет фактическое загружаемое содержимое поля, а не само поле, которое могло бы предоставить такую ​​информацию.

Вместо этого следует использовать скрипт at_download, добавленный к URL-адресу объекта, за которым следует идентификатор поля:

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

Вы также можете повторно использовать виджет Архетипы для поля, передав имя поля методу widget:

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

При этом отобразится размер файла, значок (если имеется), имя файла и тип файла mime.

В обоих этих примерах я предположил, что имя поля 'first_field'.

...