Yes. Your example will work.
The only case in where you would get wrong behaviour if you do:
URL('otherapp',r=request) (*)
or
URL('otherapp','othercontroller',r=request) (**)
I.e. if you say the URL is in the current request (r=request) and stil
you specify the 'otherapp' and/or the 'othercontroller' but not a
'otherfunction'. If you specify a function either by
URL('otherapp','othercontroller','otherfunction',...)
or
URL(..,f='otherfunction',...)
there is no change of behavior.
I argue that (*) and (**) where wrong because misleading to begin
with.
On Jul 30, 7:18 am, rochacbruno <[email protected]> wrote:
> I have a lot of code wrote in this sintax, But, ig its wrong, no problem to
> replace.
>
> Will this still works?
>
> _href=URL(request.application,'plugin_wiki','page',args=[row,])
>
> Sent from my iPhone
>
> On 30/07/2010, at 04:05, mdipierro <[email protected]> wrote:
>
> > You are right but it only breaks backward compatibility in a case
> > where things would be misleading. Here are some example:
>
> > # old syntax that still works
> > URL('a','c','f')
> > URL(a='a',c='c',f='f')
> > URL(f='f',r=request)
>
> > #new syntax that resulted in an error before
> > URL('f')
> > URL('c','f')
> > URL(f='f')
> > URL(c='c',f='f')
>
> > ## changed of behaviour
> > URL('a',r=request)
> > was /a/current_controller/current_function
> > now
> > was /current_app/current_controller/a
>
> > I.e. the change of behavior only occurs if the user explicitly
> > specifies r and a (without naming a) but not f. I.e. if the user is
> > specifying redundant information that may be conflicting (because a
> > may differ from r.application). Users should not be doing this anyway.
> > I have never seen anybody doing this.
>
> > Did I miss something? can you see any other case when the behavior
> > would change?
>
> > What do other people think?
>
> > Massimo
>
> > On Jul 29, 8:27 pm, Thadeus Burgess <[email protected]> wrote:
> >> 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