On May 5, 2010, at 12:16 PM, Chris wrote:

> How would you get the current url location?

Generally speaking, you want to use URL(r=request, args=request.args, 
vars=request.vars), or something like that (I may not have all the spelling 
right). 

That will not include the host part of the URL, which is normally just what you 
want; the browser will use the same host that it used to get the page.

> 
> I've tried to build the current url using request.env.http_host +
> request.env.path_info, but it doesn't take into account routes.py.
> 
> For example using that method returns 127.0.0.1:8000/init/default/
> contact, but I want it to return http://127.0.0.1:8000/contact --
> which is the what is displayed in the browser.
> 
> On May 3, 8:59 pm, Jonathan Lundell <jlund...@pobox.com> wrote:
>>> On Mon, May 3, 2010 at 11:08 PM, Jonathan Lundell <jlund...@pobox.com> 
>>> wrote:
>>> web2py probably isn't setting referer on a redirect, and if it did, you'd 
>>> have to interpret the URL.
>> 
>>> No. If I have no redirect and call a location with no args the referer is 
>>> not set when I arrive at web2py's default "Internal error" page. Which is 
>>> okay because the standard says referer is optionally set by the client.
>> 
>>> How about putting the previous location in session before you redirect?
>> 
>>> That works on some instances, but not for controlling for the wrong number 
>>> or the wrong parameters. A concrete example:
>> 
>>> 1. Currently inwww.domain.com/a/c/f/arg1
>>> 2. User edits address bar and presses enter (removed 
>>> arg1):www.domain.com/a/c/f/
>>> 3. The called action:
>> 
>>> def f():
>>>     if not request.args:
>> 
>>>         redirect(request.last_location) # including args
>> 
>>> Perhaps someone knows of an alternative way to accomplish the same?
>> 
>> The session is pretty much the only place you've got to keep information 
>> between pages. In the above example, in step 1, you need to save the current 
>> location in session. You can do that in f() before you return, or if you 
>> want to always do it (from every c/f), you could perhaps do it in your 
>> layout.html: copy the location from request to session. (That won't work for 
>> redirects, but you might not want it to.)


Reply via email to