Here is the actual URL called and args passed.  The "auth-like" function is 
auth_search and the argument should be "content"

current.request.url
'/default/auth_search/content/'
current.request.args
[]

Or, with no routes.py, we see the application 'swim_smarter' come to the 
fore and now the args are passed.

current.request.url
'/swim_smarter/default/auth_search/content/'
current.request.args
['content']

So let's try with routes.py but with no listing of "default" as the default 
controller

current.request.url
'/default/auth_search/content/'
current.request.args
[]

I'm using the URL function to create the URL in all cases.

When I say it "fails to work" I mean it leaves the request.args empty, and 
my magic function never invokes one of the sub-functions.  Thus it passes 
back the entire page created by the widget function of the default 
controller.  So it got a bunch of HTML when all it expected was some JSON 
from my sub-function.

On Saturday, October 8, 2016 at 6:27:40 AM UTC-7, Anthony wrote:
>
> On Friday, October 7, 2016 at 11:29:36 PM UTC-4, Joe Barnhart wrote:
>>
>> I created some "widgets" (for lack of a more descriptive name) using the 
>> same pattern as the Auth object.  When you call it, it returns a special 
>> function that can respond to several different "sub-functions".  This has 
>> been tremendously handy but now I'm encountering a problem -- when I uses 
>> this in my "default" controller it fails to parse its sub-function properly.
>>
>> Here is the code, patterned after Auth:
>>
>>     def __call__(self):
>>         from gluon.http import HTTP
>>         request = current.request
>>         ra = request.args
>>         if not ra:
>>             return self.widget()
>>         if ra[0] in self.api:
>>             return getattr(self, ra.pop(0))()
>>         else:
>>             raise HTTP(404)
>>
>> The above code lives in a module, not a controller.  The method 
>> self.widget() just returns a dictionary that contains the html and so 
>> forth, for building the presentation of the widget.  The instance var 
>> self.api contains a list of "sub-functions" that, when called, will 
>> return something different than the widget() function.  Usually this is 
>> some sort of ajax function or other script-y thing that is called from the 
>> widget.
>>
>> My problem lies in the request.args[].  When called from any controller 
>> but my default, everything works perfectly.  The calling URL looks 
>> something like:
>>
>> /big_app/default/widget/sub_function/whatever
>>
>
> How are you generating that URL? With the router, presumably it should 
> just be /widget/sub_function/whatever, no?
>
> Also, what do you mean that it fails to work? Exactly what happens?
>
> We may need to see more code.
>
> Anthony
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to