Hi Jonathan I appreciate you are trying to help and explain -- and you did! Your prompting inspired me to look at the source and there is the exact solution I needed in the notes (see below). I don't totally understand the mylink variables, but hey, I believe it works! Thanks! -D """ More advanced linkto example:: def mylink(field, type, ref): return URL(r=request, args=[field])
rows = db.select(db.sometable.ALL) table = SQLTABLE(rows, linkto=mylink) This will link rows[id] to current_app/current_controlle/current_function/value_of_id """ On Nov 6, 6:39 pm, Jonathan Lundell <jlund...@pobox.com> wrote: > On Nov 6, 2010, at 11:16 AM, villas wrote: > > > > > Hi Jonathan, > > > I still do not see why it is 'reasonable' to force a table name into > > the linkto url, and then have to write a lamba function to override > > it. After all, we have the URL helper which gives us all the > > flexibility we need. If I want the table name, I can introduce that > > myself as an arg or a var. > > > However, I appreciate that the linkto logic is quite complex. Thanks > > very much for your explanation and help. > > I'm not especially trying to defend the current setup, only to (sort of) > explain it. The complexity of linkto combined with its lack of documentation > makes it not as useful as it might be. > > FWIW, one reason it doesn't accept a bare URL() is that it's doing some extra > work to get the field representation, which ends up being part if its href. > > > > > Best wishes > > -D > > > On Nov 6, 4:48 pm, Jonathan Lundell <jlund...@pobox.com> wrote: > >> On Nov 6, 2010, at 6:02 AM, villas wrote: > > >>> @Jonathan > >>> Rather than experiment with a new lamba work-around for 'linkto', I > >>> may as well avoid 'linkto' and use 'represents' which I already > >>> know. > > >>> My question was more to do with whether linkto behaves correctly and > >>> flexibly to produce the urls required. From your review of the code, > >>> it seems that linkto is not always so useful if it insists on adding a > >>> 'table' arg. > > >> It makes sense that it would do so, though, since it's reasonable to put > >> both the function and table name into the URL. I don't think it'd make > >> sense to do that differently just because they happened to have the same > >> identifier string. > > >> WRT the lambda, the linkto logic explicitly checks for a function and uses > >> whatever it returns. That's apparently the intended use if the default > >> href that it generates isn't suitable. The advantage to using linkto (over > >> represents) is that it's specific to this particular usage. Otherwise, > >> yeah, it's a coin toss. > > >> The complicated linkto behavior doesn't appear to be documented (lambda or > >> not; there are multiple cases), which makes it somewhat less useful than > >> it might be. > > >>> @Richard > >>> Yes, I know I can use represents, I said that in my original post, > >>> but thanks all the same for your help. > > >>> -D > > >>> On Nov 5, 9:31 pm, Jonathan Lundell <jlund...@pobox.com> wrote: > >>>> On Nov 5, 2010, at 12:18 PM, Richard Vézina wrote: > > >>>>> Try this! > > >>>>> table.id.represent = lambda id: \ > >>>>> A('Edit',_href=URL(r=request,f='FUNCNAME',args=('TABLE',id))) > > >>>> That's going to have the same problem, since in villas's example, both > >>>> FUNCNAME and TABLE are 'mytable'. > > >>>> My earlier suggestion is to change this: > > >>>> SQLTABLE(mytablerows,linkto=URL()) > > >>>> to something like this: > > >>>> SQLTABLE(mytablerows, linkto=lambda rep,t,tn: URL(r=request, > >>>> args=[rep])) > > >>>>> On Fri, Nov 5, 2010 at 3:11 PM, villas <villa...@gmail.com> wrote: > >>>>> @Jonathan > >>>>> I think you are right about the /<function>/<table>/<id> convention > >>>>> for SQLTABLE linkto. > >>>>> But by using linkto=URL() I should be able specify whichever URL I > >>>>> want rather than have to work around an unnecessary convention? > > >>>>> @Richard > >>>>> I played around a little, but I couldn't make that work for me, but > >>>>> maybe I'm missing something. > > >>>>> On Nov 5, 6:33 pm, Jonathan Lundell <jlund...@pobox.com> wrote: > >>>>>> On Nov 5, 2010, at 11:00 AM, villas wrote: > > >>>>>>> Does SQLTABLE linkto work properly? > > >>>>>>> If I use: > >>>>>>> SQLTABLE(mytablerows,linkto=URL()) > > >>>>>>> I get URLs like this: myapp/default/mytable/mytable/id > > >>>>>>> Note the duplication of "mytable". > > >>>>>> I wonder if this is really a "duplication". As web2py interprets a > >>>>>> URL, the first mytable is a function name, and the second (in this > >>>>>> case) is a table name, right? They happen to have the same name here. > > >>>>>> (That said, SQLTABLE's linkto logic is distinctly non-trivial; I'm not > >>>>>> at all sure what's going on in several of the cases.) > > >>>>>>> I have tried with URL('mytable') and URL(f='mytable'), but it's the > >>>>>>> same. > > >>>>>>> Of course I can work around the issue specifying: > >>>>>>> db.mytable.id.represent = lambda id: > >>>>>>> A('edit:',id,_href=URL(args=(id))) > > >>>>>>> ...which gives the URL that I expect, but that is not the question > >>>>>>> here... > > >>>>>>> --D > >