web2py 重定向到错误的页面

web2py redirect to a incorrect page

我正在学习 web2py。我发现 2 个非常简单的操作之间存在重定向错误。 我根据web2py手册简单修改的​​这个应用程序只是用来帮助我理解web2py的控制流,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 的表单中输入了一些内容,但是当我按下提交按钮时,它没有重定向到 "second" 操作。而且我在浏览器url

中发现了错误

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的bug还是我误解了web2py的控制流程?

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

相反,使用 URL() 助手生成正确的 URL:

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

这将导致以下 HTML:

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

一般来说,最好使用 URL() 助手来生成内部 URLs(特别是如果你使用 URL 重写系统,因为它会自动翻译URL 基于重写规则)。