2011-11-16 3 views
2

3 개의 FileField (plone.app.blob.field.FileField)가있는 사용자 지정 콘텐츠 형식이 있는데 해당 URL, 그래서 나는 그것들을 나의 커스텀 뷰에 넣을 수 있고 사람들은이 파일들을 다운로드 할 수있을 것이다. 테스트 및 디버그 할 클루을 사용하는 경우 그러나, 나는 전화 :Plone 4 - plone.app.blob.field.FileField에있는 파일의 URL 가져 오기

getFirst_file는() ('first_file'라는 필드) 첫 번째 파일에 접근이다
context.getFirst_file().absolute_url() 

.

URL이 반환은 다음과 같습니다 'eat.00001는'파일 필드를 포함 내 사용자 정의 유형의 객체 인 'HTTP //foo/.../eat.00001', ...

그것은 '응용 프로그램/PDF'를 반환

context.getFirst_file().getContentType() 

, 그것은 PDF 파일이기 때문에 올바른이다 : 재미있는 것은 내가 호출하는 경우입니다.

나는 꽤 잃어 버렸습니다. 어떤 도움도 받으실 수 있습니다. 미리 감사드립니다!

답변

4

파일 필드는 absolute_url 메서드를 지원하지 않습니다. 대신 acquisition을 통해 개체 자체에서 메서드를 상속하므로 결과를 볼 수 있습니다. 또한 getFirst_field()을 호출하면 해당 정보를 제공 할 수있는 필드 자체가 아니라 실제 다운로드 할 수있는 필드 내용이 반환됩니다. 에 필드 이름을 전달하여

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

당신은 또한 필드의 전형 위젯을 다시 사용할 수 있습니다 대신

, 당신은 id 필드 다음에 대상 URL에 추가 된 at_download 스크립트를 사용해야합니다 widget 방법 :

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

이 파일 크기, 아이콘 (가능한 경우), 파일 이름과 파일의 MIME 형식을 표시합니다.

이 두 예제 모두 필드 이름이 'first_field'라고 가정했습니다.

+0

고맙습니다. Martijin! 당신의 도움으로 나는 내가 원하는 것을 할 수있었습니다! :) – maccinza

+0

기꺼이 도와 드릴 수 있습니다! 대답을 받아 들일 수 있겠습니까? 답변 투표 점수 옆에있는 V 자 모양의 아이콘입니다. :-) –

+0

완료 =) 다시 한번 감사드립니다! – maccinza