Here is a better way to do it, though:
links = [ lambda row:
A(
SPAN(_class='icon plus'),
SPAN(_class='buttontext button',
_title='Create PO',),
'Create PO',
_href = URL(
'purchase_orders', 'create_po',
# vars = {'product': p.findall(str(row.id))}
vars = {'product': row.id}
),
),
]
grid = SQLFORM.grid(query, csv=False, deletable=False,
columns=columns,
maxtextlength=64, links=links)
On Nov 12, 9:39 am, Cliff <[email protected]> wrote:
> Anthony,
>
> Thanks for the pointer. Much better.
>
> Cliff Kachinske
>
> On Nov 11, 10:50 pm, Anthony <[email protected]> wrote:
>
>
>
>
>
>
>
> > Also, using the .element() and .elements() methods provides some powerful
> > options for searching the DOM --
> > seehttp://web2py.com/book/default/chapter/05#Server-side-DOM-and-Parsing.
>
> > Anthony
>
> > On Friday, November 11, 2011 5:37:52 PM UTC-5, Cliff wrote:
>
> > > Props to Richard Vezina for posting a similar technique. This is
> > > built on his post
>
> > > From the book we know that, "Components' objects can be referenced via
> > > their position, and helpers act as lists with respect to their
> > > components."
>
> > > A little archaeology in the source code tells us that SQLFORM.grid
> > > emits a DIV object. When there's an index table involved, the DIV has
> > > three components: a DIV, a DIV containing a TABLE and another DIV.
>
> > > # first we get the grid
> > > grid = SQLFORM.grid(query)
>
> > > # examine the div at the top of the grid div
> > > # for index lists, this div is of the class 'console',
> > > # so look for 'console' near the start of the div
> > > # there is CERTAINLY a better way to detect an index table, but
> > > this works
> > > if 'console' in str(grid[0])[0:35]:
> > > ## grid[1][0][1] is the DIV, TABLE and TBODY
> > > ## so we iterate over TRs in the table body
> > > for row in grid[1][0][1]:
> > > ## TR acts like a list, so we use some Python list fu
> > > row.insert(-1, 'foo')
> > > return dict(grid=grid)
>
> > > Done. Haven't cleaned up the table head yet, but it should be
> > > similar.