2017-10-14 221 views
0

如何获取在窗体上提交的用户输入以显示在固定的URL上?Flask(Python):将输入作为参数传递给具有固定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 

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

类型错误:display_msg()失踪1个人需要的位置参数:“味精”

此代码实际工作正常,如果我初始化msg为一个全局变量,然后在main的顶部做global msg,但它不允许我将msg作为参数传递给display_msg

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

回答

1

由于从MSG的数据已经存储在请求对象,而不是将它作为一个参数来display_msg,它可以如下获得:

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

的类型错误发生,因为的关键字参数url_for传递给请求对象,而不是display_msg的参数。

0

你需要指定味精参数:

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

我希望display_msg的URL是相同的,无论用户在表单上输入什么内容。请阅读我的文章的最后几行。 – moravec

-1

您可以使用全局变量来存储信息并返回到一个固定的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 

希望这对你有帮助。

+0

是的,我已经知道了。我问为什么当我作为参数在本地传递它时不起作用。 – moravec

+0

你能解释为什么你试图摆脱全球成员方法吗?我修改了答案,通过使用默认参数来接受对'display_msg()'的直接调用。 – nipunasudha

+0

好吧,因为在可能的情况下避免使用全局变量通常是一种很好的做法。请参阅下面的答案。 – moravec

相关问题