First post: nested <dtml-in> tags looping through python lists
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
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
participants (2)
-
john jacobs -
Troy Farrell