Solved :-) I respond to myself :-) I was looking in the wrong direction :-(
Thank for the previous reponses, but in my case they doesn't fit since I construct a graph instead of a list. The solution template that works for me : In the controler : def widget_submit_button(field,value): # widget for additional form button item = INPUT(_type='submit', _name=field, _value=value, value=value) return (SPAN(item)) ... def form_1(): # form = SQLFORM.factory(Field('btn_back', 'string', default=T('< Back'), widget=widget_submit_button), submit_button=T('Next >')) if form.accepts(request.vars, session): if request.vars.has_key('no_table.'+'btn_back'): redirect(URL('form_0')) redirect(URL('form_2')) return dict(form=form) ... in the view I use : ... {{=form.custom.begin}} .. {{=form.custom.widget['all_back']}} {{=form.custom.submit}} {{=form.custom.end}} ... -- Patrick Installé (pinsta...@gmal.com)