将参数传递给其他路由不起作用

时间:2017-10-05 11:40:46

标签: python python-3.x flask

我正在尝试使用以下重定向将变量su传递到另一个路由。

return redirect(url_for('showspace', spacename=user.username, su='Welcome back'))

路线如下:

@app.route('/space/<spacename>', methods=['GET', 'POST'])
@login_required
def showspace(spacename, su = None):
    if su != None:
        print(su)

如果在没有su参数的情况下调用路线,我希望suNone。但是,如果将su传递给showspaces,我希望打印su的内容。这样做会引发以下错误:

TypeError: showspace() missing 1 required positional argument: 'su'

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

对于视图函数中的每个参数,您也可以创建一个url变量。

因此您可能需要将您的网址更改为以下内容:

@app.route('/space/<spacename>/<su>', methods=['GET', 'POST'])

然后你需要将默认值设为Null,你可以这样做:

def showspace(spacename, su = None)

而这第二部分,你已经想到了自己。所以只需调整网址装饰将解决问题。

请记住,使用url(GET)获得的值不一定是您从url_for函数发送的值,因为用户可以轻松更改这些值。

如果是这个方法的用户,你必须像下面这样调用你的视图:

<domain>/space/<spacename>/

注意尾随斜线。因此,如果您希望能够在没有尾部斜杠的情况下调用它,则有两个选项:

  1. 使用su
  2. 发送POST
  3. 添加新的网址规则
  4. 要添加新的网址规则,您可以像这样定义它们:

    @app.route('/space/<spacename>/<su>/', methods=['GET', 'POST']    
    @app.route('/space/<spacename>/', methods=['GET', 'POST'])
    def showspace(spacename, su = None):
        pass