Hi, On Mon, 2007-04-30 at 22:23 +0200, Maciej Wisniowski wrote: > > class StudentDetails: > > """Helper to return a student photo.""" > > def getPhoto(self): > > student = self.context > > return StudentPhoto(student) > > > > In my page template, I can see that the IImage object is being created > > correctly.. > > > > <div tal:define="photo view/getPhoto"> > > <span tal:content="photo">#</span> > > </div> > > > > gives me <zope.app.file.image.Image object at 0xb75c6c6c>. But to turn > > this > > object into a URL so that I can put it in an <img> tag is beyond me. When > > I > > try to do an @@absolute_url on the photo object I get the error saying > > there's not enough context. > > > > Am I going about this the wrong way? Is there some other thing I need to > > be > > doing in order for there to be enough context? > Hm... not sure if it is good solution but it is just a quick though so > possibly somebody may give you something better. Maybe there are ready > solutions for this. In general if you want > to return image then you have to return it's data to the browser (not > Image object) and you also have to set proper headers like content-type > and content-length. I don't remember exactly how it should go but you > should find examples with google or see how z3c.image does this etc. > This should be something like: > > > class StudentDetails: > """Helper to return a student photo.""" > def __call__(self): > student = self.context > self.request.setHeader('content-type', 'image/png') > # determine and set content-length here > return StudentPhoto(student).data # not sure if it was 'data' > # check image.py > > If you declare this in zcml as: > > <browser:view > name='myphoto' > class=StudentDetails' > permission='zope.Public' > for=..... > > then you may use url just like: > > student_object/myphoto > > and this will execute __call__ method of the view class. >
Maciej's code should do it for you but will need to be a browser view: class StudentPhotoView(BrowserView): etc <browser:view name='myphoto' class=StudentPhotoView' permission='zope.Public' for=IStudent /> Also take a look at zope.app.file.browser.image.py for ImageData which takes the trouble to set the correct headers (which Maciej also implies). Hope this helps. Darryl _______________________________________________ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users