【问题标题】:How to redirect according to radio button value in Flask?如何根据Flask中的单选按钮值重定向?
【发布时间】:2017-06-10 05:52:49
【问题描述】:

我是 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>
  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'))

任何建议将不胜感激!

【问题讨论】:

  • 你有一个函数来处理你可能重定向到的每个页面吗?您收到的错误是什么?

标签: python html redirect flask radio-button


【解决方案1】:

您的代码不起作用,因为当按下提交按钮时,您将向您的目标发送一个发布请求,该请求由模板中的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

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

【讨论】:

  • 非常感谢您的帮助!但是我尝试了您的代码并收到错误:werkzeug.routing.BuildError: 无法为端点“点击”构建 url。您是否忘记指定值 ['selectedValue']?
  • 您必须在模板中将&lt;form action="{{ url_for('click') }}" method="POST"&gt; 更改为&lt;form method="POST"&gt;
  • 谢谢!像魅力一样工作!
猜你喜欢
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 2018-10-12
  • 2021-08-09
  • 1970-01-01
  • 2013-07-06
  • 2018-03-14
  • 1970-01-01
相关资源
最近更新 更多