[Zope] dtml access to "container" within zclass

ra@burningman.com ra@burningman.com
Tue, 20 Aug 2002 15:04:20 -0700


Dieter Maurer wrote:
 > ra@burningman.com writes:
 >  > Dieter Maurer wrote:
 >  > > Ra writes:
 >  > >  > is there any way to gain access to an instance of a zclass 
from a dtml
 >  > >  > method that is within that zclass?
 >  > > When called from ZPublisher (i.e. the Web),
 >  > > it should run in the context of this Z instance, i.e. the instance
 >  > > is at the top of the DTML namespace.
 >  > > You can (under these conditions) use its "this" method to get
 >  > > the instance itself.
 >  >
 >  > Alas, "this" isn't working; I get "global name 'this' is not defined".
 > Looks like the DTML Method is not called correctly (apparently, nothing
 > on its namespace has an acquisition context).

Yep, this was it.

 > How is th DTML Method activated? Via ZPublisher? Explicitely?

I've got a dtml-method called "member_detail_html" which calls the 
dtml-method "detail_html" within the user object.  "member_detail_html" 
originally contained the following:

-------------
<dtml-var header>

<dtml-if membername>
    <dtml-var "acl_users.getItem(membername).detail_html()">
<dtml-else>
    <dtml-var "_.SecurityGetUser().detail_html()">
</dtml-if>

<dtml-var footer>
--------------

I changed "member_detail_html" like so:

--------------
<dtml-var header>

<dtml-if membername>
    <dtml-let userobj="acl_users.getItem(membername)">
      <dtml-var "userobj.detail_html(userobj, REQUEST)">
    <dtml-let>
<dtml-else>
    <dtml-var "_.SecurityGetUser().detail_html(_.SecurityGetUser(),
REQUEST)">
</dtml-if>

<dtml-var footer>
---------------

and it is now working.  I'm not 100% certain I've chosen the right 
parameters to pass in, though... my best guess is that the first 
parameter is supposed to be the "this()" object (i.e. the top of the 
called method's namespace stack) and the second parameter should be the 
REQUEST, if needed.  Is this correct?

Thanks for your help!

-r