You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过点击按钮获取HTML表单中的文本值(Flask场景)

解决Flask中点击按钮无法传递输入框值的问题

我正在用Python和Flask做Web开发,想做一个让用户输入数字、后台用Python脚本处理的网站。现在用HTML表单获取输入,但只有在输入框按回车才能把值传给Flask函数,点击按钮不行。相关代码如下:

我的HTML代码

<body>
    <div class="start">
        <form action="/submit" method="post">
            <input type="submit" class="start-button" value="start">
        </form>
    </div>

    <div class="Filter-options">

        <form action="/modify" method="post" class="price">
            <p>Preis:</p>
            <label for="option1">
                <input type="text" name="options" class="price-field" value="0">
            </label>
        </form>

    </div>

</body>

我的Flask代码

from flask import Flask, render_template, request
from livereload import Server
import sys


sys.path.insert(0, "C:\Users\Myuse\Downloads\cellular_contract-main (1)\cellular_contract-main")
print()
app = Flask(__name__)

@app.route('/')
def Home():
    return render_template("home.html")

@app.route("/submit", methods=["POST"])
def submit():
    if request.method == "POST":
        text_value = request.form.get("options")
        from compare import main
        result = main(text_value)
        return f"{result}"  

# @app.route("/modify", methods=["POST"])
# def modify(text_input=None):
#     if text_input is None:
#         text_input = float(request.form.get("options"))
    
    

if __name__ == '__main__':
    app.run(debug=True)

问题原因

核心问题是输入框和提交按钮分属两个独立的<form>标签:

  • 点击start按钮时,提交的是第一个<form action="/submit">,这个表单里没有name="options"的输入控件,所以Flask的request.form.get("options")拿不到值。
  • 输入框按回车时,触发的是它所在的第二个<form action="/modify">的提交,所以能正常获取值,但这不是预期的触发方式。

解决方案

方案1:将按钮和输入框放在同一个表单(推荐)

把start按钮移到包含输入框的表单里,点击按钮时会提交整个表单,自动带上输入框的值。修改后的HTML:

<body>
    <div class="Filter-options">
        <form action="/submit" method="post" class="price">
            <p>Preis:</p>
            <label for="option1">
                <input type="text" name="options" class="price-field" value="0">
            </label>
            <!-- 把start按钮移到这个表单内 -->
            <input type="submit" class="start-button" value="start">
        </form>
    </div>
</body>

对应的Flask代码可优化输入校验(避免非数字输入报错):

from flask import Flask, render_template, request
import sys

sys.path.insert(0, "C:\\Users\\Myuse\\Downloads\\cellular_contract-main (1)\\cellular_contract-main")
app = Flask(__name__)

@app.route('/')
def Home():
    return render_template("home.html")

@app.route("/submit", methods=["POST"])
def submit():
    if request.method == "POST":
        text_value = request.form.get("options")
        # 校验输入合法性
        if not text_value:
            return "请输入有效数字"
        try:
            text_value = float(text_value)
        except ValueError:
            return "请输入合法的数字"
        from compare import main
        result = main(text_value)
        return f"{result}"  

if __name__ == '__main__':
    app.run(debug=True)

方案2:保留原有布局,用JavaScript处理

如果不想调整表单结构,可以给按钮绑定点击事件,手动收集输入值并提交表单。修改后的HTML:

<body>
    <div class="start">
        <button class="start-button" onclick="submitInput()">start</button>
    </div>

    <div class="Filter-options">
        <form id="priceForm" action="/submit" method="post" class="price">
            <p>Preis:</p>
            <label for="option1">
                <input type="text" name="options" class="price-field" value="0" id="optionsInput">
            </label>
        </form>
    </div>

    <script>
        function submitInput() {
            // 手动触发表单提交
            document.getElementById('priceForm').submit();
        }
    </script>
</body>

Flask代码和方案1保持一致即可。

可选:使用/modify路由

如果原本想使用/modify路由,只需把表单的action改为/modify,并取消Flask中对应路由的注释并完善逻辑:

@app.route("/modify", methods=["POST"])
def modify():
    text_input = request.form.get("options")
    if not text_input:
        return "请输入有效数字"
    try:
        text_input = float(text_input)
    except ValueError:
        return "请输入合法的数字"
    from compare import main
    result = main(text_input)
    return f"{result}"

内容的提问来源于stack exchange,提问作者user17627774

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:22:53