首页 > 解决方案 > 有没有办法验证在 Flask 中选中了一个复选框?

问题描述

我正在尝试创建一个包含多个复选框的 Flask 表单。但是,我想确保用户在一组大约 30 个复选框中至少选中了一个复选框。可以在烧瓶中做吗?

这是 3 个按钮的 Python 代码

button1 = BooleanField('button1')
button2 = BooleanField('button2')
button3 = BooleanField('button3')

这是 3 个按钮的 Jinja2 代码

{{ form.button1(class="form-checkbox-input") }}
{{ form.button1.label(class="form-check-label") }}<br>
{{ form.button2(class="form-checkbox-input") }}
{{ form.button2.label(class="form-check-label") }}<br>
{{ form.button3(class="form-checkbox-input") }}
{{ form.button3.label(class="form-check-label") }}<br>

标签: pythoncheckboxjinja2flask-wtforms

解决方案


button1 = BooleanField('button1')
button2 = BooleanField('button2')
button3 = BooleanField('button3')

这是处理数组的一种相当低效的方式(就您必须编写的内容而言,而不是代码的速度)。您可能需要考虑使用实际数组,例如(a)

buttonArray = []
for idx in range(30):
    # F-strings relatively recent Python, you could go back
    # to "button%d".format(idx + 1) if need be.

    buttonArray.append(BooleanField(f'button{idx + 1}'))

然后你可以用它来检查一个或多个是否为真:

if any(buttonArray):
    atLeastOneTrue()

和这样的东西来处理每个真正的元素:

for idx in range(len(buttonArray)):
    if buttonArray[idx]:
        print(f'button{idx + 1} is true')

(a)请记住,我对 Jinja2 知之甚少,但如果你能在那时将它们制作成数组以提高效率,我不会感到惊讶。


推荐阅读