Okay, I've found that if I use "self" in place of "self.aq_parent" when calling "getattr" it gets the attribute in the context of self and everything works great!
-Brian On Fri, 13 Dec 2002, Brian R Brinegar wrote: > Howdy, > > Overview: > > I'm working on a helper product for Zope Presentation Templates. The goal > of this product is to allow people to drop static content into a site > developed with Zope Presentation Templates using WebDAV clients. (This is > similar to the Kube Product but it's not folderish and supports WebDAV.) > > At first I suggested creating some ZPT with an Id like "view". Have users > drop in static content as File objects. Then link to the files like > "file_id/view". The "view" ZPT would reference the document_src method > of the file object to pull the static content into the page. I like > this approach, and I think this is how Presentation Templates are meant to > be used. > > Problem: > > Our users will not change links created by WYSIWYG tools to include the > "/view" so we need a product that removes the need for this. I am calling the > product HTMLBlock. Version one of the product is a simple data holder > with a document_src method which returns the content. It does not override > index_html, instead acquiring the index_html from the context. I create an > index_html page template with all of my presentation and some code like: > > <div tal:replace="here/document_src">Content Goes Here</div> > > When an HTMLBlock is viewed it shows up with all of the dynamic > presentation of the index_html ZPT with the HTMLBlocks static content > dropped in. Great! Almost there! :-) > > The problem is that people cannot create a default HTMLBlock with the Id > index_html. It ends up trying to render itself much like a folder with the > Id index_html. No Good. :-( > > So I temporarily fixed this by changing the template to redirect to an > object with the Id "index" if document_src doesn't exist. When someone > views a folder the index_html template is accessed, document_src is not > defined so it redirects to "index" which is an HTMLBlock which renders > correctly. I don't like this. :*( Still No Good. > > What I want is for the HTMLBlock product to have a property which > specifies the Id of the template to use. Implement an index_html or > __call__ method to locate the template and call it in the context of > itself. I would like this to work generically so that the template could > be DTML, Python, a ZPT, or anything else. > > Casey Duncan has some uber useful code on ZopeLabs.com to call an object > generically using the ZPublisher. I borrowed it and came up with the > code below, but it doesn't work. It calls the template, but the template > cannot access methods of this object. > > Suggestions? Is there a better approach? > > (Note: template_id is the Id of the template to render) > > def __call__(self, client=None, REQUEST={}, RESONSE=None, **kw): > """ > Call the selected template in the context of myself. > """ > > securityManager = getSecurityManager() > securityManager.addContext(self) > > # Check for the template > if not hasattr(self.aq_parent, self.template_id): > return str(self) > > obj = getattr(self.aq_parent, self.template_id) > if not securityManager.checkPermission('View', obj): > return default > > return mapply( > object=obj, > positional=REQUEST.args, > keyword=REQUEST, > debug=call_object, > maybe=1, > missing_name=missing_name, > handle_class=dont_publish_class, > context=self, > bind=1) > > > The code below works, but requires a PageTemplate with the Id "index" to > work > > def __call__(self, client=None, REQUEST={}, RESONSE=None, **kw): > return self.index() > > Thanks, > -Brian > > > _______________________________________________ > Zope-Dev maillist - [EMAIL PROTECTED] > http://lists.zope.org/mailman/listinfo/zope-dev > ** No cross posts or HTML encoding! ** > (Related lists - > http://lists.zope.org/mailman/listinfo/zope-announce > http://lists.zope.org/mailman/listinfo/zope ) > _______________________________________________ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )