[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