[Zope-dev] Returning lists of Tuples from External Methods

Jeff Rush Jeff Rush" <jrush@timecastle.net
Tue, 09 Nov 99 02:37:11 -0500


On Mon, 08 Nov 1999 18:01:41 -0500, Phillip J. Eby wrote:

>At 02:48 PM 11/8/99 -0800, David S. Harrison wrote:
>>
>>But if I return
>>a two element tuple, I get a list of the second element of the tuple
>>when I use <dtml-in>.  I suspect Zope is doing something like
>>interpreting the tuple list as name/value pairs and adding them
>>to the namespace.  But I haven't found any documentation on it.
>>Any clues on what is happening here?
>
>When iterating over a sequence of two-item tuples, <dtml-in> puts the first
>item into "sequence-key" and the second into "sequence-item".  It is indeed
>treating the sequence as a .items() style list.

So *that's* whats happening!  Drove me crazy trying to get it to work here,
and I finally came up with workaround that used sequence-index to subscript
into the original sequence.

Would that behavior be considered a bug?  I kept looking for an option
to dtml-in to tell it "hands off" my sequence and don't get smart with it.

<dtml-with "_(results = ZopeFind(PARENTS[1], search_sub=1, REQUEST=REQUEST))">
  <dtml-in results>
    <dtml-if "REQUEST.script != ''">
      <dtml-let item="results[_['sequence-index']]" <!-- Work Around for dtml-in Behavior -->
                abs_path="_.string.split((URL2+'/'+item[0]), REQUEST.script)[1][1:]">
        &nbsp;&nbsp;&nbsp;&nbsp;<dtml-var abs_path> <BR>
        <dtml-if "not item[1].meta_type in excludables">
          <dtml-call "catalog_object(item[1], abs_path)">
          <dtml-call "REQUEST.set('itemcount', itemcount+1)">
        </dtml-if>
      </dtml-let>
    </dtml-if>
  </dtml-in>
</dtml-with>

-Jeff Rush