This may not be solvable with nevow/stan but I'm hoping it may be...
I'm doing
return t.select(name="establishment")[ [ t.option(value=e['_oid'])[e['establishment_desc']] for e in data ] ]
to create a select list from data, where data is in the form
[{'_oid': '1', 'establishment_desc': 'foo'}, {'_oid': '2', 'establishment_desc': 'bar'}, ... ]
The drop down that is created really needs to be sorted alphabetically by the establishment_desc.
I realise I can probably write a function to sort the data myself and pass it to data.sort(), but I was wondering if there was a way to do it with stan or nevow after the DOM has been created.
At 2004-07-09 12:14 PM +0100, you wrote:
This may not be solvable with nevow/stan but I'm hoping it may be...
I'm doing
return t.select(name="establishment")[ [ t.option(value=e['_oid'])[e['establishment_desc']] for e in data ] ]
to create a select list from data, where data is in the form
[{'_oid': '1', 'establishment_desc': 'foo'}, {'_oid': '2', 'establishment_desc': 'bar'}, ... ]
The drop down that is created really needs to be sorted alphabetically by the establishment_desc.
I realise I can probably write a function to sort the data myself and pass it to data.sort(), but I was wondering if there was a way to do it with stan or nevow after the DOM has been created.
-- Ed.
Another "maybe not 'the nevow way,' but it works".... I created this in about December out of frustration with not begin able to get a select where value != label. (May be possible now, I don't know.) Also, this was before I (more or less) got the hang of stan. But, as I said, it works.
In one application, all my pages derive from PageBase, which defines render_myselect:
def render_myselect(self, context, data): """ Populate options in a select wgt.
data is a list of dictionaries. Each dictionary has (at least) 'value' and 'label' fields.
Usage: <select name='...' nevow:data='...' nevow:render='myselect' /> """ # Order by label for UI ordered = [(item['label'],item['value']) for item in data] ordered.sort()
# Generate options tag = context.tag.clear() tag.children = [] for item in ordered: tag.children.append( tags.option(value=item[1])[ item[0] ] ) tag.renderer = None return tag
An example data_xx method:
def data_testselect( self, context, data ): return [ {'value':1, 'label':'Alice'}, {'value':2, 'label':'Victor'}, {'value':3, 'label':'Clancy'}, {'value':4, 'label':'Nancy'}, ]
... And in template (again, just an example):
<div> <b>Test Select</b> <select name='person' nevow:data='testselect' nevow:render='myselect' /> <br />Selections should appear in the order Alice/Clancy/Nancy/Victor </div>
__________________________________________________________ Spinward Stars, LLC Samuel Reynolds Software Consulting and Development 303-805-1446 http://SpinwardStars.com/ sam@SpinwardStars.com