Flask (Python):将输入作为参数传递给具有固定 URL 的不同路由的函数

mor*_*vec 3 python redirect routes url-for flask

如何让在表单上提交的用户输入显示在固定 URL 上?

@app.route('/', methods=['GET','POST'])
def main():
    if request.method == 'POST':
        msg = request.form['message']
        return redirect(url_for('display_msg', msg=msg))
    else:
        return form


@app.route('/msg')
def display_msg(msg):
    return msg
Run Code Online (Sandbox Code Playgroud)

提交表单时,我收到以下错误:

类型错误:display_msg() 缺少 1 个必需的位置参数:'msg'

此代码实际工作很好,如果我初始化msg的全局变量,然后做global msg在顶部main,但它不会让我传递msg的参数display_msg

这将起作用的另一种方法是,如果我更改@app.route('/msg')@app.route('/<string:msg>'),但这会将 URL 更改为用户在表单上提交的任何内容,这不是我想要的。我希望 URL 被修复。

mor*_*vec 6

由于来自msg的数据已经存储在请求对象中,而不是将其作为参数传递给display_msg,因此可以按如下方式访问它:

@app.route('/msg')
def display_msg():
    return request.args.get('msg')
Run Code Online (Sandbox Code Playgroud)

发生 TypeError 是因为url_for的关键字参数被传递给请求对象,而不是作为参数传递给display_msg