On 9 Jul 2012, at 1:29 PM, Francisco Costa wrote:
> I'm using the Parameter-based system for routing
> 
> In my routes.py I have this
> 
>     routers = dict(
> 
>         # base router
>         BASE = dict(
>             applications = ['admin', 'app', 'blog'],
>             default_application = 'app',
>             map_hyphen = True,
>             domains = {
>                 'blog.domain.com'   : 'blog',
>                 'domain.com'          : 'app'
>             },
>         ),
>         app = dict(
>             controllers = ['default', 'user'],
>             functions = ['index', 'show', 'list'],
>             default_controller = 'default',
>             default_function = dict(default='index', user='show')
>         ),
>         blog = dict(
>             default_controller = 'default',
>         ),
>     )
> 
> 
> When I go to http://localhost/user/john i get this: "invalid function 
> (user/john)"
> 
> I would like it to map it to http://localhost/user/show/john
> 
> So it is possible to pass args to a default function in a non default 
> controller without the name of the function?

Try specifying functions as a dict of lists keyed by controller names, and 
include and entry for user. Something like

app = dict( 
        ...
        functions = dict(
                default = [ list of functions],
                user = [ list of functions ],
        ).
        ...

One other thing to pay attention to is that by default there's a function 
app/default/user that manages your auth object. The router will do the right 
thing, but there may be some omissions that it won't be able to do because the 
conflict creates an ambiguity. In particular, the router can normally shorten 
/app/default/user/whatever to /user/whatever, but it can't do that if you have 
a function named user.

You can work around that by renaming your controller, or by renaming the 
auth-support function and telling Auth: auth = Auth(... 
function='somethingotherthanuser'...)

Reply via email to