Flask(Python):将输入作为参数传递给具有固定URL的不同路由的函数
Flask (Python): Pass input as parameter to function of different route with fixed URL
如何让用户在表单上提交的输入显示在固定的 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
初始化为全局变量,然后在 main
的顶部执行 global msg
,此代码实际上可以正常工作,但它不允许我传递 msg
作为 display_msg
.
的参数
另一种可行的方法是,如果我将 @app.route('/msg')
更改为 @app.route('/<string:msg>')
,但这会将 URL 更改为用户在表单上提交的任何内容,这不是我想要的.我希望 URL 得到修复。
您需要指定msg参数:
@app.route('/msg/<msg>')
def display_msg(msg):
return msg
您可以使用全局变量来存储消息,return 到一个固定的 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
希望对您有所帮助。
NOTE:Please don't use this answer! what happens when multiple clients connect to your server and access the same route at once! they will actually share data between then!
由于来自msg的数据已经存储在请求对象中,而不是作为参数传递给display_msg, 可以这样访问:
@app.route('/msg')
def display_msg():
return request.args.get('msg')
发生 TypeError 是因为 url_for 的关键字参数被传递给请求对象,而不是作为参数传递给 display_msg.
如何让用户在表单上提交的输入显示在固定的 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
初始化为全局变量,然后在 main
的顶部执行 global msg
,此代码实际上可以正常工作,但它不允许我传递 msg
作为 display_msg
.
另一种可行的方法是,如果我将 @app.route('/msg')
更改为 @app.route('/<string:msg>')
,但这会将 URL 更改为用户在表单上提交的任何内容,这不是我想要的.我希望 URL 得到修复。
您需要指定msg参数:
@app.route('/msg/<msg>')
def display_msg(msg):
return msg
您可以使用全局变量来存储消息,return 到一个固定的 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
希望对您有所帮助。
NOTE:Please don't use this answer! what happens when multiple clients connect to your server and access the same route at once! they will actually share data between then!
由于来自msg的数据已经存储在请求对象中,而不是作为参数传递给display_msg, 可以这样访问:
@app.route('/msg')
def display_msg():
return request.args.get('msg')
发生 TypeError 是因为 url_for 的关键字参数被传递给请求对象,而不是作为参数传递给 display_msg.