[Zope] Re: [Zope-dev] Calling in Context

Brian R Brinegar brinegar@ecn.purdue.edu
Fri, 13 Dec 2002 16:38:06 -0500 (EST)


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  -  Zope-Dev@zope.org
> 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 )
>