我对Flask很新,我想做以下事情:
<form action="{{ url_for('click') }}" method="POST"> <div class="half"> <input type="radio" name="option" value="a" /> </div> <div class="half"> <input type="radio" name="option" value="b" /> </div> <input type="submit" value="Submit"> </form>
点击提交按钮时,页面应根据所选的单选按钮值重定向到另一个页面,即“a.html”。
我在这里遇到了python代码:
@app.route('/') def home(): return render_template('index.html') @app.route('/<selectedValue>', methods=['POST']) def click(): selectedValue = request.form['option'] return redirect(url_for(selectedValue + '.html'))
任何建议都将不胜感激!
答案 0 :(得分:2)
您的代码无效,因为按下提交按钮后,您将向目标发送一个帖子请求,该请求由模板中的action
属性定义。但是,定义的端点需要selectedValue
参数,该参数会根据您的选择而变化。您在模板中使用的url_for()
函数无法提供,因为在将模板发送到客户端时,它会呈现为纯HTML,这意味着在做出选择之前。
尝试不同的方法:
from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def home():
if request.method == 'POST':
selectedValue = request.form['option']
return redirect(url_for('click', selectedValue=selectedValue))
return render_template('index.html')
@app.route('/<selectedValue>')
def click(selectedValue):
return render_template(selectedValue)
if __name__ == '__main__':
app.run(host='localhost', port=5000, debug=True)
这样,您就会将POST
请求发送到home
端点,并使用request
对象获取option
值。然后,您将调用重定向功能,提供selectedValue
。
注意:我建议您为自己使用的每个模板使用单独的端点功能。