我正在学习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的控制流?
答案 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)。