我想在Flask中获取复选框的值。我读过similar post并试图使用request.form.getlist('match')
的输出,因为它是我使用[0]
的列表,但似乎我做错了。这是获得输出的正确方法还是有更好的方法?
<input type="checkbox" name="match" value="matchwithpairs" checked> Auto Match
if request.form.getlist('match')[0] == 'matchwithpairs':
# do something
答案 0 :(得分:20)
如果只有一个具有给定名称的输入,则不需要使用getlist
,只需get
,尽管它无关紧要。你所展示的确有效。这是一个简单的可运行示例:
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
print(request.form.getlist('hello'))
return '''<form method="post">
<input type="checkbox" name="hello" value="world" checked>
<input type="checkbox" name="hello" value="davidism" checked>
<input type="submit">
</form>'''
app.run()
提交带有两个复选框的表单会在终端中打印['world', 'davidism']
。请注意,html表单的方法为post
,因此数据将位于request.form
。
虽然在某些情况下知道字段的实际值或值列表是有用的,但看起来您关心的是该框是否已被选中。在这种情况下,更常见的是给复选框一个唯一的名称,并检查它是否具有任何值。
<input type="checkbox" name="match-with-pairs"/>
<input type="checkbox" name="match-with-bears"/>
if request.form.get('match-with-pairs'):
# match with pairs
if request.form.get('match-with-bears'):
# match with bears (terrifying)
答案 1 :(得分:12)
我找到了4种方法:总结一下:
# first way
op1 = request.form.getlist('opcao1') # [u'Item 1'] []
op2 = request.form.getlist('opcao2') # [u'Item 2'] []
op3 = request.form.getlist('opcao3') # [u'Item 3'] []
# second
op1_checked = request.form.get("opcao1") != None
op2_checked = request.form.get("opcao2") != None
op3_checked = request.form.get("opcao3") != None
# third
if request.form.get("opcao3"):
op1_checked = True
# fourth
op1_checked, op1_checked, op1_checked = False, False, False
if request.form.get("opcao1"):
op1_checked = True
if request.form.get("opcao2"):
op2_checked = True
if request.form.get("opcao3"):
op3_checked = True
# last way that I found ..
op1_checked = "opcao1" in request.form
op2_checked = "opcao2" in request.form
op3_checked = "opcao3" in request.form
答案 2 :(得分:1)
在 Flask 中使用复选框时,我选择使用 .get()
方法。这是因为在我的情况下(与复选框的情况一样),返回的复选框的值为“on”或“None”请考虑以下情况:
在 POST 请求中获取表单数据的常用方法。使用复选框时,以下解决方案失败:
username = request.form["uname"]
使用 get 方法。这个方法有效,因为表单的结果是字典的形式。当该值为 None
时,get 方法不会中断(与未选中复选框的情况一样):
username = request.form.get("uname")