如何根据 Flask 中的单选按钮值进行重定向?

l.z*_*.lz 3 html python redirect radio-button flask

我对 Flask 很陌生,我想做以下事情:

  1. 在我的 index.html 中有两个单选按钮和一个提交按钮:
<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>
Run Code Online (Sandbox Code Playgroud)
  1. 当单击提交按钮时,页面应根据选定的单选按钮值(即“a.html”)重定向到另一个页面。

  2. 我被这里的 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'))
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激!

MrL*_*eeh 5

您的代码不起作用,因为当按下提交按钮时,您将向您的目标发送一个发布请求,该目标由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)
Run Code Online (Sandbox Code Playgroud)

这样您就可以将POST请求发送到home端点并使用该request对象来获取您的option值。然后您将调用重定向函数来提供selectedValue.

注意:我建议为您使用的每个模板使用单独的端点函数。