An updated attempt: def index(): # create header column links headers = dict() for col in db.email_archive.fields: headers['email_archive.' + col] = A(col, _href=URL(vars=dict(orderby=col))) # manage sort order if 'email_archive_orderby' not in session: session.email_archive_orderby = ['desc', 'id'] if 'orderby' in request.vars: if session.email_archive_orderby[1] == request.vars.orderby: if session.email_archive_orderby[0] == 'asc': session.email_archive_orderby[0] = 'desc' else: session.email_archive_orderby[0] = 'asc' else: session.email_archive_orderby = ['asc', request.vars.orderby] # convert to DAL orderby key = db.email_archive[session.email_archive_orderby[1]] if session.email_archive_orderby[0] == 'desc': key = ~key emails = crud.select(db.email_archive, headers=headers, orderby=key) return dict(emails=emails)
On Nov 4, 10:06 pm, baloan <balo...@googlemail.com> wrote: > When I say ugly I mean: > 1. too much duplication, > 2. too much boilerplate code. > > Just imagine what happens if I apply my solution to more than a few > tables. > > Regards, Andreas > > On Nov 4, 10:00 pm, baloan <balo...@googlemail.com> wrote: > > > This is my feeble attempt at the problem - but it does the job: > > > def index(): > > add_submenu() > > headers = {'email.id': A('Id', > > _href=URL(vars=dict(orderby='id'))), > > 'email.email': A('Email address', > > _href=URL(vars=dict(orderby='email'))), > > 'email.active':A('Active', > > _href=URL(vars=dict(orderby='active'))), > > 'email.expires':A('Expires', > > _href=URL(vars=dict(orderby='expires'))), > > 'email.change_user':A('Changed by', > > _href=URL(vars=dict(orderby='change_user'))), > > 'email.change_date':A('Changed on', > > _href=URL(vars=dict(orderby='change_date'))), > > } > > if 'email_orderby' not in session: > > session.email_orderby = ['asc', 'email'] > > if 'orderby' in request.vars: > > if session.email_orderby[1] == request.vars.orderby: > > if session.email_orderby[0] == 'asc': > > session.email_orderby[0] = 'desc' > > else: > > session.email_orderby[0] = 'asc' > > else: > > session.email_orderby = ['asc', request.vars.orderby] > > key = db.email[session.email_orderby[1]] > > if session.email_orderby[0] == 'asc': > > emails = crud.select(db.email, headers=headers, orderby=key) > > else: > > emails = crud.select(db.email, headers=headers, orderby= ~key) > > return dict(emails=emails) > > > I don't like it - it looks ugly. Who can make it look more elegant? > > > Best regards, Andreas > > balo...@gmail.com > >