Hi James, Thanks for your thorough explanation with examples, good stuff!
I had the feeling that views needed to be used but it looked so inefficient. Is there a thought/philosophy behind the fact that we can't access adapters directly from ZPT? Thanks, Mike > Mike, > > When I started getting into adapters recently I > discovered that you can't (easily) access adapters > directly from ZPT. You will need to create a python > view class as an intermediate step. > > Where you use a "context" statement to access > properties of an object in ZPT, e.g.: > > <div class="field" tal:content="context/description" > /> > > you use a "view" statement to get at the methods of > the Python View Class, e.g.: > > <div class="field" tal:content="view/rating" /> > > You use the ZCML to wire up the ZPT to the Python, > e.g.: > > <page > name="someview.html" > for="dotted.path.to.IObject" > class=".pythonfile.ViewClass" > template="template.pt" > permission="zope.Public" > menu="zmi_views" title="View"/> > > Where python file is the file the viewclass is in, > usually in the same browser folder, and ViewClass is > the name of a class defined within that file. > > The ViewClass itself can do whatever logic you want to > prepare data for the ZPT, but if it's just grabbing > adapted methods and re-presenting them, it'll be > something like this: > > from wherever import IAdapter > > class ViewClass: > > def __init__ (self, context, request): > self.context = context > self.request = request > > self.adaptation = IAdapter(context) > > def method(self): > """Get the adapted doodle from the adapter""" > adapted = self.adaptation.adaptermeth() > return adapted > > Where "adaptermeth" is the method defined in your > adapter, and "IAdapter" is the name of your adapter. > You probably won't want to reference it as > self.adaptation - call if something more meaningful - > self.myimagefunction, or whatever. > > You will need to def a method for each adapted method > you want to grab from adapters and pass to the ZPT. > > If you have more than one adapter you want to access > from a given ZPT you need to make sure you import them > all, and use a different "self.adapterdesc =" in the > __init__, and you can then call each from the methods > of the view class. > > Hope that helps, > James > > --- Michael van Slingerland <[EMAIL PROTECTED]> wrote: > >> Hi all, >> >> I've made an adapter on the image content type and >> built a new view on the >> IImage interface. But what I can't find anywhere is >> how to access methods >> defined in the adapter from ZPT? >> >> Anyone knows howto do this? >> >> Thanks, >> Mike >> >> _______________________________________________ >> Zope3-users mailing list >> [email protected] >> http://mail.zope.org/mailman/listinfo/zope3-users >> > > > > > ___________________________________________________________ > To help you stay safe and secure online, we've developed the all new > Yahoo! Security Centre. http://uk.security.yahoo.com > _______________________________________________ > Zope3-users mailing list > [email protected] > http://mail.zope.org/mailman/listinfo/zope3-users > _______________________________________________ Zope3-users mailing list [email protected] http://mail.zope.org/mailman/listinfo/zope3-users
