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

时间:2017-01-25 06:39:48

标签: python html redirect flask radio-button

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

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

    2. 我在这里遇到了python代码:

    3. @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'))
      

      任何建议都将不胜感激!

1 个答案:

答案 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

注意:我建议您为自己使用的每个模板使用单独的端点功能。