For those of us who loves using SQLTABLE but is missing some simple personalizing methods (more link columns, image instead of 'id' in links etc.) here is very basic function. It allows to update the whole column of a SQLTABLE object using regular expressions. I hope it helps someone who is as lazy as me.
E.g. SQLTABLE produces: <tr> <td>id</td> <td>name</td> <td>friends number</td> </tr> <tr> <td>1</td> <td>John</td> <td>100</td> </tr> <tr> <td>2</td> <td>Steve</td> <td>500</td> </tr> <tr> <td>3</td> <td>Ron</td> <td>200</td> </tr> Example 1: Replace 'friends number' value with hyperlink that is to open friends list: table = update_column(table, argument_col_num=0, target_col_num=-1, pattern="(\d+)", replace_with="A(%(g1)s, _href=URL(r=request, f='friends_list', args=[%(arg)s]))") will produce: <tr> <td>id</td> <td>name</td> <td>friends number</td> </tr> <tr> <td>1</td> <td>John</td> <td><a href="/friends_list/1">100</a></td> </tr> <tr> <td>2</td> <td>Steve</td> <td><a href="/friends_list/2">500</a></td> </tr> Example 2: Replace 'id' value in first column with a PNG image (a button) linked to opening the object: table = update_column(table, argument_col_num=0, target_col_num=0, replace_with="A(IMG(_src=URL(r=request, c='static', f='button.png'), _style='padding:0px;'), _onclick='javascript:alarm(\"%(arg)s\");', _style='cursor:pointer;', _href=URL(r=request, f='show', args=[%(arg)s]))") Place this function to models and it will be available from all views. import re def update_column(table, argument_col_num=0, target_col_num=-1, pattern="(\d+)", replace_with="A(%(g1)s, _href=URL(r=request, f='show', args=[%(arg)s]))"): #pass 'replace_with' as a string like "A(%(g1)s, URL(r=request, f='show', args=[%(arg)s]))" #where (g1) means group1 from reg. exp. match (count from 1) # (arg) is value of column number 'argument_col_num' regexp = re.compile(pattern) tagz = re.compile("<.*?>") for i in range(len(table.components[1])): target_td = table.components[1][i].components[target_col_num] arg_td = table.components[1][i].components[argument_col_num] if type(target_td) == type(TD()) and len(target_td.components) > 0 and len(arg_td.components) > 0: m = re.match(regexp, str(target_td.components[0])) a = re.sub(tagz, '' , str(arg_td.components[0])) d = {'arg': a} if m: for j in range(1, len(m.groups()) + 1): d['g' + str (j)] = m.group(j) table.components[1][i].components[target_col_num] = TD(eval (replace_with % d)) return table I am not sure this should be contributed into gluon.sqlhtml as method for SQLTABLE but definitely saves me much time for quick prototyping. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---