[Zope] Special-name of variables called 'name' or 'domain'

Mayers, Philip J p.mayers@ic.ac.uk
Tue, 9 Jan 2001 21:15:10 -0000


I've got some SQL method, and a folder structure, and am seeing some *very*
annoying results. Namely, <dtml-with> seems to cancel out variable
assignments from an enclosing <dtml-in>

/root
  get_machine_hosts (SQL method)
  get_host_aliases (SQL method)
  show (dtml method)
  /host
    show (dtml method)
  /alias
    show (dtml method)

get_machine_hosts takes 'machineid' and returns 'name','domain','ip', e.g.

(for a 5-homed box) get_machine_hosts('535252'):

www,random.com,192.168.3.2
mail,hosting.com,192.168.3.3
news,random.com,192.168.3.4
sqldb,random.com,192.168.3.5
workstation,random.com,192.168.3.6

get_host_aliases takes 'ip' and returns 'name','domain' e.g.

get_host_aliases('192.168.3.3') [mail.random.com]:

'pop3','random.com'
'smtp','random.com'
'mail','random.com'
'imap','random.com'

But, I'm having problems with the 'in' and 'with' tags using the variable
'name'. The DTML methods are:

/root/show

<dtml-in get_machine_hosts>
  <dtml-with host><dtml-var show></dtml-with>
</dtml-in>

/root/host/show

<TR>
  <TD>&dtml-ip;</TD>
  <TD>&dtml-name;</TD>
  <TD>&dtml-domain;</TD>
</TR>

<dtml-in get_host_aliases>
  <dtml-comment>POINT A</dtml-with>
  <dtml-with alias>
    <dtml-comment>POINT B</dtml-with>
    <dtml-var show>
  </dtml-with>
</dtml-in>

/root/alias/show

<TR>
  <TD></TD>
  <TD>&dtml-name;</TD>
  <TD>&dtml-domain;</TD>
</TR>


Now, assuming I'm looking at machineid 535252 (mail.random.com). I get this:


|  192.168.3.3  |   mail   |  hosting.com  |
|               |   mail   |  hosting.com  |
|               |   mail   |  hosting.com  |
|               |   mail   |  hosting.com  |
|               |   mail   |  hosting.com  |


That is, the variable 'name' and 'domain' aren't set correctly. But, if I
modify /root/host/show as follows:

<TR>
  <TD>&dtml-ip;</TD>
  <TD>&dtml-name;</TD>
  <TD>&dtml-domain;</TD>
</TR>

<dtml-in get_host_aliases>
  <dtml-comment>POINT A</dtml-with>
  <TR>
    <TD></TD>
    <TD>&dtml-name;</TD>
    <TD>&dtml-name;</TD>
  </TR>
  <dtml-with alias>
    <dtml-comment>POINT B</dtml-with>
    <dtml-var show>
  </dtml-with>
</dtml-in>



I get:


|  192.168.3.3  |   mail   |  hosting.com  |
|               |   pop3   |  random.com  |
|               |   mail   |  hosting.com  |
|               |   imap   |  random.com  |
|               |   mail   |  hosting.com  |
|               |   smtp   |  random.com  |
|               |   mail   |  hosting.com  |
|               |  webmail |  random.com  |
|               |   mail   |  hosting.com  |


It would appear that the <dtml-with alias> tag wipes out the 'name' and
'domain' variables back to the values they had outside the <dtml-in
get_host_aliases> tag, so calling /root/alias/show gives wrong data. Very
odd. *BUT*, if I use 'aliasname' and 'aliasdomain' as the variable names,
everything is OK.

WTF?

While I'm at it, is <dtml-with foldername><dtml-var dtmlmethod></dtml-with>
really the best way to call a DTML method of a folder?

Regard,
Phil