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

时间:2017-10-14 06:48:21

标签: python redirect flask routes url-for

如何让表单上提交的用户输入显示在固定的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

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

TypeError:display_msg()缺少1个必需的位置参数:' msg'

如果我将msg初始化为全局变量,然后在global msg的顶部执行main,则此代码实际上可以正常工作,但它不允许我通过{{1} }作为msg的参数。

另一种方法是,如果我将display_msg更改为@app.route('/msg'),但这会将网址更改为用户在表单上提交的内容,而这不是我想要的。我想要修复URL。

3 个答案:

答案 0 :(得分:1)

您需要指定 msg 参数:

@app.route('/msg/<msg>')
def display_msg(msg):
    return msg

答案 1 :(得分:1)

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

@app.route('/msg')
def display_msg():
    return request.args.get('msg')

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

答案 2 :(得分:0)

您可以使用全局变量来存储消息并返回到固定的URL。

编辑:我更新了display_msg()以使用默认参数。

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


@app.route('/msg')
def display_msg(msg = global_msg):
    return msg

希望这有助于你。