On Nov 6, 2010, at 12:27 PM, villas wrote:
> 
> 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
> """
> 

Yes. I think that's identical to:

        SQLTABLE(rows, linkto=lambda rep,t,tn: URL(r=request, args=[rep]))

> 
> 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
>> 
>> 


Reply via email to