Thanks for the correction. I guess my version allows you to eliminate the 
app, controller, and function, but doesn't allow anything else in the url 
in that case.

Anthony

On Thursday, March 29, 2012 8:34:19 PM UTC-4, Jonathan Lundell wrote:
>
> On Mar 29, 2012, at 11:33 AM, Simon Bushell wrote:
> > This is a neat solution Anthony (actually, it was my original idea for 
> solving this). however I seem to be getting the same error: invalid 
> function (default/tcgata). 
> > 
> > Forgive me, is this code in the root-level routes.py? or a routes.py in 
> applications/shortener? 
> > 
> > Should anything else be in routes.py? 
>
> If I'm remembering this correctly, you want something like this (root 
> level is fine):
>
> routers = dict(
>     BASE = dict(
>         default_application = 'shortener',
>     ),
>     shortener = dict(
>         default_controller = 'default',
>         default_function = 'index',
>         functions = ['index', 'user', 'download', 'call'],
>     ),
> )
>
> ...where the functions list is a complete list of the visible functions in 
> the default controller (that is, any function that can appear in a URL).
>
> The router needs that list so it can distinguish function names from args, 
> and can then omit 'index'. Since in your example tcgata is not in the 
> functions list, it can be safely treated as args[0].
>
>
> > 
> > S
> > 
> > 
> > 
> > On Thursday, March 29, 2012 6:40:09 PM UTC+1, Anthony wrote:
> > routes_in = (
> >              (r'^/?$', r'/app_name/default/index'),
> >              (r'^/(?P<url>[^/]*)/?$', 
> r'/app_name/default/index/\g<url>'),           
> >              )
> > 
> > 
> > in your root-level routes.py The drawback is that you will lose access 
> to all other apps (including admin) but that can be a good thing for public 
> deployments.
> > 
> > You can catch the other apps by adding route patterns that match them 
> before your catch-all pattern (the patterns are processed in order, and the 
> first match is used). Anyway, using the parametric router and specifying 
> the url-shortening app as the default app might be simpler:
> > 
> > routers = dict(
> >     BASE = dict(
> >         default_application = 'shortener',
> >         default_controller = 'default',
> >         default_function = 'index',
> >     ),
> > )
> > 
> > Then http://myapp.com/tcgata will get routed to 
> http://myapp.com/shortener/default/index/tcgata, and "tcgata" will be 
> available to the index() function in request.args(0).
> > 
>
>
>

Reply via email to