如何在Python中处理复选框

6

我正在尝试在HTML中使用复选框,将这些复选框返回到我的Python后端,然后如果单击框,则递增三个计数器。

目前我的HTML如下所示,并且运行良好:

<form method="post">
    <input type="checkbox inline" name="adjective" value="entertaining">Entertaining
    <input type="checkbox inline" name="adjective" value="informative">Informative
    <input type="checkbox inline" name="adjective" value="exceptional">Exceptional
</form>

然后在我的Python后端中,我有以下代码:

def post(self):
    adjective = self.request.get('adjective ')

    if adjective :
        #somehow tell if the entertaining box was checked
        #increment entertaining counter
        #do the same for the others

我认为也许可以在HTML中将名称命名为 "adjective[]"... 可能... - Joran Beasley
你知道你可以只需使用 print形容词 来查看里面的内容,对吧?它将与你的HTML混合在一起,但你可以通过查看源代码来查看... - kindall
@kindall 那个对于调试很好,但我需要以编程方式来执行它,这样每次在后端都可以工作。 - clifgray
是的,但通过调试,您可以轻松地看到如何以编程方式完成它,通过查看您正在获取的内容,这将确定如何访问它。 - kindall
你正在使用 webapp 还是 webapp2?它们在从请求中获取多个值方面具有略微不同的 API。 - Blckknght
@Blckknght 我正在使用webapp2 - clifgray
2个回答

8

当您的表单具有相同 name 属性的多个复选框时,在提交表单时该请求将具有该名称的多个值。

您当前的代码使用 Request.get 来获取值,但如果有多个值,它将仅检索第一个值。相反,您可以使用 Request.get_all(name)(在 webapp 中)或 Request.get(name, allow_multiple=True)(在 webapp2 中)来获取所有值。这将返回一个(可能为空的)列表,其中包含该名称的所有值。

以下是您如何在代码中使用它:

def post(self):
    adjectives = self.request.get('adjective', allow_multiple=True)
    for a in adjectives:
        # increment count
        self.adjective_count[a] += 1 # or whatever

        # do more stuff with adjective a, if you want

    # do other stuff with the request

谢谢!这很有意义,但我在网上并不容易找到它。 - clifgray
我认为这里是文档中相关的部分。 - Blckknght

0

更改name=""并将其与value相同,这样您就可以轻松地询问,这不是更容易吗?

如果有趣:

如果有信息:

我不是Python程序员,只是告诉你而已。


是的,我同意这样做会更容易一些,但我认为这并不是正确的方式。虽然我可能错了。 - clifgray
有没有类似于 switch 语句的东西,比如如果形容词 == 有趣: //打印代码或者 switch case 1 如果形容词 == 有趣: //执行case 2 如果形容词 == 信息丰富: //执行 - ELHippie
Python没有switch语句。通常的替代方法是使用字典。但我担心我实际上并不理解你建议的代码(将其放在答案中并进行适当的格式化可能会有所帮助)。 - Blckknght
抱歉,我忘记使用代码标签了,但我的意思是通过等号或其他方式检查“形容词”的值。我认为默认值应该是在表单中选择的任何一个(娱乐、异常或信息),而不是空值、0或无值。但我不知道Python如何工作,但也许你知道我不知道Python术语的类似代码,所以如果您可以将“形容词”的值与字符串集“信息”或您选择的任何其他字符串进行比较。 - ELHippie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接