[Zope] First post: nested <dtml-in> tags looping through python lists

Troy Farrell troy@entheossoft.com
Tue, 15 Jan 2002 23:50:58 -0600


Welcome to Zope, John.

I've not analyzed the issue very throughly, but it appears to me as 
though line 5 of the dtml document should be
    <td><dtml-var row_item></td>
If my memory serves me, when using the prefix attribute, the divider is 
an underscore.  That way we avoid <dtml-var 
expr="_['sequence-item']['this']"> and can use <dtml-var 
expr="prefix_item['this']">

Hope that helps.
Troy

-- 
Troy Farrell
Developer
Entheos Software
mailto:troy@entheossoft.com
http://www.entheossoft.com

john jacobs wrote:

> Hello All,
> 
> 	This is my first post.  Please excuse me if this question / issue
> has been posted before -- I would appreciate a reference to the previous
> post if it has.
> 
> 	I am calling an external python script from a dtml document.  This
> external script performs some database queries and returns the result set
> as a list of lists (a list of rows, each row containing a list of fields).
> I would like to nest one <dtml-in> tag within another, so as to display
> the value of each field for each row in the result set.  My existing code
> looks like this:
> 
> 	dtml document:
> 
> 	<table border=1>
> 	<dtml-in expr="retrieveData(REQUEST)">
> 	<tr>
> 	<dtml-in sequence-item prefix="row">
> 		<td><dtml-var row-item></td>
> 	</dtml-in>
> 	</tr>
> 	</dtml-in>
> 	</table>
> 
> 
> The external method constructs the list of lists like this:
> 
>     ## database connection and query code removed -- variable "cursor" is
>     ## a database cursor pointing to a MySQL result set
> 
>     curdesc = cur.description
>     records = cur.fetchall()
>     outrecords = []
> 
>     for nextrecord in records:
>         newresult = {}
>         i = 0
>         for nextcolumn in nextrecord:
>             key = curdesc[i][0]    ## column name for the current field
>             newresult[key+"_type"] = curdesc[i][1]
>             newresult[key] = value
>             i = i + 1
>         outrecords.append(newresult)
>     return outrecords
> 
> 
> Now, when the SQL query returns zero results, the dtml document correctly
> displays nothing.  However, whenever at least one row *is* returned from
> the query (and thus my list of lists contains at least one row), I get the
> following zope error:
> 
>  Error Type: KeyError
>  Error Value: 0
> 
> 
> Now, my questions are:  Has anyone attempted to do this before?  Is it
> feasable?  If a list of lists is not the correct data structure to use for
> nested <dtml-in> tags, what is the correct data structure and how can I
> construct one in an external python method?
> 
> Thanks in advance,
> 
> --john