Massimo, you cannot

I am sorry but that would break backwards compatibility.

Say if in certain apps you have this (in alot of the earlier apps on
web2py.com do this too)

URL(request.application, 'static', 'logo.png')

Or

URL(request.application, 'default', 'index')

Unfortunately, we cannot re-arrange the variables defined in URL from this order

def URL(
    a=None,
    c=None,
    f=None,
    r=None,
    args=[],
    vars={},
    anchor='',
    extension=None,
    env=None
    ):

--
Thadeus





On Thu, Jul 29, 2010 at 8:23 PM, Michele Comitini
<[email protected]> wrote:
> thumbs up!
>
> 2010/7/30 mdipierro <[email protected]>
>>
>> I took it one step further...
>>
>> >>> URL()
>> /app/default/index
>> >>> URL('test')
>> /app/default/test
>> >>> def test(): return 'test'
>> >>> URL(test)
>> /app/default/test
>> >>> URL('static','filename')
>> /app/static/filename
>> >>> URL('other','static','filename')
>> /other/static/filename
>>
>> No more r=, c=, f= needed but all optional.
>>
>>
>> On Jul 28, 6:28 pm, Thadeus Burgess <[email protected]> wrote:
>> > SORRY! =D
>> >
>> > --
>> > Thadeus
>> >
>> > On Wed, Jul 28, 2010 at 6:22 PM, mdipierro <[email protected]>
>> > wrote:
>> > > WOW. Uploading to trunk. Now I need to revise the book again. :-(
>> >
>> > > On Jul 28, 5:51 pm, Thadeus Burgess <[email protected]> wrote:
>> > >> >>> URL(r=request, c='hello', f='world', args=['hi'],
>> > >> >>> vars={'q':'greetings'}, anchor='the_world')
>> >
>> > >> '/welcome/hello/world/hi#the_world?q=greetings'>>> URL(c='hello',
>> > >> f='world', args=['hi'], vars={'q':'greetings'}, anchor='the_world')
>> >
>> > >> '/welcome/hello/world/hi#the_world?q=greetings'
>> >
>> > >> Attached is the diff
>> >
>> > >> This should not effect any current usages of URL, but from this point
>> > >> forward we shouldn't have to specify r=request!
>> >
>> > >> --
>> > >> Thadeus
>> >
>> > >> On Wed, Jul 28, 2010 at 5:21 PM, mdipierro <[email protected]>
>> > >> wrote:
>> > >> > ok
>> >
>> > >> > On Jul 28, 4:52 pm, Thadeus Burgess <[email protected]> wrote:
>> > >> >> For a little more advanced version of what Massimo just posted:
>> >
>> > >> >> This allows you to use both.
>> >
>> > >> >> URL(r=request, c=<controller>, f=.....)
>> > >> >> and
>> > >> >> URL(c=<controller>, f=<function>.....)
>> >
>> > >>
>> > >> >> >>http://packages.python.org/web2py_utils/init.html#gurlhttp://hg.thade......
>> >
>> > >> >> The reason we have to pass the request to URL each time is because
>> > >> >> it
>> > >> >> is just imported into the context. Since it is just a python
>> > >> >> function,
>> > >> >> it has no knowledge of request.
>> >
>> > >> >> Why can't we do something like gURL from within web2py? When
>> > >> >> building
>> > >> >> the context, why can't we make URL a loaded function that will get
>> > >> >> request passed to it, exactly how gURL works.
>> >
>> > >> >> Effectively, we won't have to pass request into URL function
>> > >> >> anymore... ever.
>> >
>> > >> >> If your interested, I can work on the patch.
>> >
>> > >> >> --
>> > >> >> Thadeus
>> >
>> > >> >> On Wed, Jul 28, 2010 at 3:56 PM, mdipierro
>> > >> >> <[email protected]> wrote:
>> > >> >> > 1) It is a bit more complex because of static, appadmin, and
>> > >> >> > admin.
>> > >> >> > You can map
>> >
>> > >> >> > /function/var1/var2
>> >
>> > >> >> > into
>> >
>> > >> >> > /app/controller/function/var1/var2
>> >
>> > >> >> > using a file routes.py
>> > >> >> >  ------- begin file
>> > >> >> > routes_in=[
>> > >> >> >  ('/admin/$anything','/admin/$anything'),
>> > >> >> >  ('/static/$anything','/app/static/$anything'),
>> > >> >> >  ('/appadmin/$anything','/app/appadmin/$anything'),
>> > >> >> >  ('/$anything','/app/default/$anything'),
>> > >> >> > ]
>> > >> >> > routes_out=[(y,x) for (x,y) in routes_in]
>> > >> >> > ----- end file
>> >
>> > >> >> > 2) in db.py define
>> >
>> > >> >> > def url(f,args={},vars={}):
>> > >> >> >      return URL(r=request,f=f,args=args,vars=vars)
>> > >> >> > def go(f,args={},vars={},flash=''):
>> > >> >> >      session.flash=flash
>> > >> >> >      return go(url(f=f,args=args,vars=vars))
>> >
>> > >> >> > and use
>> >
>> > >> >> >    url('index')
>> >
>> > >> >> > or
>> >
>> > >> >> >   go('index',flash='you are being redirected')
>> >
>> > >> >> > I do it all the time
>> >
>> > >> >> > On Jul 28, 3:29 pm, VP <[email protected]> wrote:
>> > >> >> >> I'm a newbie, so my questions probably have easy answers, but
>> > >> >> >> anyway.
>> > >> >> >> Among a few things, there are two I don't understand and think
>> > >> >> >> can be
>> > >> >> >> simplified.
>> >
>> > >> >> >> 1. this url:   app/controller/function/var1/var2
>> >
>> > >> >> >> For me at least, most of the time I probably have only one
>> > >> >> >> controller.   If there is one controller, may be we should get
>> > >> >> >> rid of
>> > >> >> >> "controller" in the url?    This will be sufficient:
>> > >> >> >> app/f/a/b/c
>> >
>> > >> >> >> 2.  Similarly, most of the time I have only one app (current
>> > >> >> >> app).
>> > >> >> >> But I use URL() a lot and every time I have to pass in request
>> > >> >> >> like
>> > >> >> >> this URL(r=request, f='foo').
>> >
>> > >> >> >> Why do I have to pass in request if I have only one app, one
>> > >> >> >> controller?
>> >
>> > >> >> >> Furthermore, isn't request supposed to be global?  If so, do we
>> > >> >> >> have
>> > >> >> >> to pass it in?
>> >
>> > >>  url_proxy.diff
>> > >> 1KViewDownload
>

Reply via email to