web2py重定向到不正确的页面

时间:2015-10-30 05:11:54

标签: html forms redirect web2py

我正在学习web2py。我在两个非常简单的操作之间发现了重定向错误。 我从web2py手册中简单修改的​​这个应用程序只是用来帮助我理解web2py的controlflow,request.args和request.vars。 这是我的默认控制器中的代码,

def index():
    redirect(URL("first",args=1))
def first():
    return dict()
def second():
    return dict()

然后我创建了first.html和second.html

first.html是

<h1>What is your name?</h1>
<form action="second">
 <input name="visitor_name" />
 <input type="submit" />
</form>

second.html是

<h1>Hello {{=request.vars.visitor_name}}</h1>

我在first.html中输入了一些内容,但是当我按下提交按钮时,它不会重定向到“第二个”动作。我在浏览器的网址中发现了一些错误

  

http://127.0.0.1:8000/welcome/default/first/second?visitor_name=zhangsan

我很困惑,做了很多测试。我更改了索引中的代码

def index():
    redirect(URL("first",args=1))

def index():
    redirect(URL("first"))

重定向很有意义。我对此感到困惑。这是web2py中的错误还是我误解了web2py的控制流?

1 个答案:

答案 0 :(得分:0)

这本书不正确(尽管源代码现已在Github上修复)。在<form action="second">中,因为“second”前面没有“/”,所以浏览器会将其解释为相对于当前页面的URL,因此它会附加到当前URL(这就是表单获取的原因)提交到/ default / first / second)。

而是使用URL()帮助程序生成正确的URL:

<form action="{{=URL('default', 'second')}}">

将产生以下HTML:

<form action="/welcome/default/second">

通常,最好使用URL()帮助程序生成内部URL(特别是如果您使用URL重写系统,因为它会根据重写规则自动转换URL)。