【问题标题】:How to get unchecked checkbox using Flask? (Or something!)如何使用 Flask 获得未选中的复选框? (或者其他的东西!)
【发布时间】:2013-08-10 11:40:04
【问题描述】:

显然有几个人拥有same problem

不幸的是,他们都使用 PHP,这显然做了一些奇怪的事情。

我有一些看起来像这样的服务器代码:

@app.route("/place", methods=['GET', 'POST'])
def place():
    names = request.form.getlist('name')
    checks = request.form.getlist('checkboxes')
    if request.form.get('Add Element'):
        #return template with another form element and all the data
    #return default template with N copies of the input

现在问题来了 - 如果我使用单选按钮来表示是/否(选中与否),我不能使用 getlist,因为它们都有相同的名称。或者,我不能使用复选框,因为出于某种原因,“他们”决定不应发送带有“假”值的复选框。

This solution 不起作用:

<input id='testName' type='checkbox' value='Yes' name='testName'>
<input id='testNameHidden'  type='hidden' value='No' name='testName'>

因为,我想要的元素数量在 1-2 倍之间。

我不想使用 Javascript,尽管我可以轻松地使用 - 这将是一个使用率极低的网站(每月可能有 200-300 次页面浏览量,最高,通常在月底聚集在一起)。

我有一个可能的解决方案是使用“YesNo”——但这似乎有点笨拙。不幸的是,我想不出任何其他方式(不涉及 javascript)来做我需要的事情。

我是否坚持使用 select 选项?

【问题讨论】:

    标签: html forms flask


    【解决方案1】:

    未选中的复选框不会序列化为响应 - 如果您处理的情况是您有多个表单部分,每个部分都有一个复选框(例如):

    Repeating section #N
        Text field: __________
        Select field: -----------^
        Checkbox: []
    
    Repeating section #N+1
        etc ...
    

    那么你可以做以下两件事之一:

    • 为每个部分指定其唯一的前缀或后缀 - 然后您可以检查响应中是否存在该特定值:

      if request.form.get("checkboxField#N", False):
          # Do something because the box is checked
      
    • 使用ImmutableOrderedMultiDict 而不是ImmutableMultiDict 作为您的表单容器(通过将app.request_class 设置为一个其parameter_storage_class 设置为ImmutableOrderedMultiDict 的类):

      class OrderedParamContainer(flask.Request):
           parameter_storage_class = ImmutableOrderedMultiDict
      
      # some time later
      app.request_class = OrderedParamContainer
      

      这将使您能够按照浏览器提供给您的顺序遍历表单的键和值(在所有现有情况下,这与表单元素在源代码):

       def by_section(form):
           section = {}
           for key, value in enumerate(form):
               if key == "firstFieldName":
                   yield section
                   section = {}
               section[key] = value
      
           if section: yield section
      

    【讨论】:

      猜你喜欢
      • 2012-04-12
      • 1970-01-01
      • 2021-08-09
      • 2023-02-26
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多