[Zope] Can't nest dtml-in using prefix ...

David H bluepaul at earthlink.net
Fri Jul 28 19:05:47 EDT 2006


Jesper Steen Steffensen wrote:

>     Give more info.  Define qry_user_roles and qry_roles as part of your
>     question.
>
>     Why are you using DTML?  Its a *dying art*.  I can hardly look at it
>     anymore :-)
>
>     DTML is depreciated in Zope (I think) and new people should go
>     right to
>     Page Templates and Python Scripts (Im sure).
>     Can you code this in a Python Script?
>
>     David
>
>
> qry_user_roles and qry_roles are two ZSQL methods that both contain 
> data fields called 'role'. They both work fine on my pages apart from 
> the nesting. One qry holds all possible roles in the system - the 
> other one associates roles to users. I need the dtml-if to insert the 
> word "selected" in a html drop-down box, so that the users role will 
> be selected when the drop-down box displays:
>
> This will iterate over the roles and build the drop-down box:
>
> <select>
> <dtml-in qry_roles>
> <option><dtml-var role></option>
> </dtml-in>
> </select>
>
> This should display the proper value as well:
>
> <select>
> <dtml-in qry_roles prefix="outer">
> <option
>
>      <dtml-in qry_users_roles>
>      <dtml-if expr="outer_role==role">
>      selected
>      </dtml-if>
>      </dtml-in>
>
> ><dtml-var role></option>
> </dtml-in>
> </select>
>
> I'm 1 month into Zope now, so this is just what I've read from the 
> Zope bible/ web etc. so far ...
>
> Is dtml really dead?!? :-o
>  Shame - I like it.. Will read more about page templates then ;-)

Hi Jesper,

I guess Jonathan does have a point.  DTML is NOT DEAD as in NOT 
BREATHING.  And its true that Zope will continue DTML well into Zope 3.

But its expertise "base" is fading.  I last used it 2 years ago.  Many 
of us just don't use it anymore. 

Most still use it because of legacy code. 

I don't think Jonathan would recommend it to a newbie? :-)

Python + zpt is a clearer model. 

Here is some code to consider if you want to try the Page Template + 
python way ...

# --------------------------------
# The python way (untested)
# --------------------------------

outer = context.SQL.qry_user_roles()
inner = context.SQL.qry_roles()
options = ''
for o in outer:
   for i in inner:
      if o.role == i.role:
         options += '\n<option value="' + i.role + '">' + i.role + 
'</option>'

return '<select>' + options + '</select>'

# --------------------------------
# in ZPT
# --------------------------------

<tal:sel tal:replace="structure python:context.python.pyRolesSelect()">
</tal:sel>


I will say that learning Page Templates will give you fits for a week or 
two.  But stick with it.

David





-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.zope.org/pipermail/zope/attachments/20060728/cddfd344/attachment.htm


More information about the Zope mailing list