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 基于重写规则)。
我正在学习 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 基于重写规则)。