I have a database with three tables, switch, hba and port. The latter is defined as: db.define_table('port', SQLField('switch', db.switch), SQLField('name', 'string'), SQLField('hba', db.hba), ) db.port.name.requires = IS_NOT_EMPTY() db.port.hba.requires = IS_IN_DB(db, 'hba.name') db.port.switch.requires = IS_IN_DB(db, 'switch.name')
Perhaps foolishly, I want to use the same page to display all of the ports for a given switch or for a given hba, so I added 'subset' and 'subset_id' to my request: http://127.0.0.1:8000/env_layout/default/ports?subset=switch&subset_id=1 Here's the code from my controller: def ports(): subset, subset_id = request.vars.subset, request.vars.subset_id if request.vars.subset: ports = db().select(db.port[subset] == subset_id, orderby=db.port.name) else: ports = db().select(db.port.ALL, orderby=db.port.name) return dict(records=ports, subset=subset, subset_id=subset_id) And here's my ports.html: {{extend "layout.html"}} <h1>Select a port...</h1> <table> <tr> {{for field in ['name', 'switch', 'hba']:}} {{if field != subset:}} <th>{{=field}}</th> {{pass}} {{pass}} </tr> {{for port in records:}} <tr> {{for field in ['name', 'switch', 'hba']:}} {{if field == "name":}} <td>{{=A(port[field], _href=URL(r=request, f="port?id=%s" % port.id))}}</td> {{elif field != subset:}} <td>{{=port[field]}}</td> {{pass}} {{pass}} </tr> {{pass}} </table><br><br> {{=A("Add a new port", _href=URL(r=request, f="new_port"))}} This query works OK: http://127.0.0.1:8000/env_layout/default/ports But this one generates a error: http://127.0.0.1:8000/env_layout/default/ports?subset=switch&subset_id=1 Traceback (most recent call last): File "gluon/restricted.py", line 107, in restricted File "C:\Program Files\web2py\applications\env_layout/views/default/ ports.html", line 40, in <module> File "gluon/sql.py", line 2363, in __iter__ File "gluon/sql.py", line 2271, in __getitem__ File "gluon/sql.py", line 1192, in __getitem__ KeyError: 'switch=1' response.write('</div>\r\n \r\n<h1>Select a port...</h1>\r \n<table>\r\n<tr>\r\n',escape=False) for field in ['name', 'hba', 'switch']: response.write('\r\n',escape=False) if field != subset: response.write('\r\n<th>',escape=False) response.write(field) response.write('</th>\r\n',escape=False) pass response.write('\r\n',escape=False) pass response.write('\r\n</tr>\r\n',escape=False) for port in records: ### this is line 40 ### response.write('\r\n<tr>\r\n',escape=False) for field in ['name', 'hba', 'switch']: response.write('\r\n',escape=False) if field == "name": response.write('\r\n<td>',escape=False) response.write(A(port[field], _href=URL(r=request, f="port? id=%s" % port.id))) response.write('</td>\r\n',escape=False) elif field != subset: response.write('\r\n<td>',escape=False) response.write(port[field]) response.write('</td>\r\n',escape=False) pass response.write('\r\n',escape=False) pass response.write('\r\n</tr>\r\n',escape=False) pass response.write('\r\n</table><br><br>\r\n',escape=False) Any idea what's going on? Or am I doing this all wrong and should be taking a different approach? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---