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 <[email protected]> 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 <[email protected]> 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
> > [email protected]
>
>