【问题标题】:How to get POST form data that have dynamic IDs?如何获取具有动态 ID 的 POST 表单数据?
【发布时间】:2021-11-03 15:24:43
【问题描述】:

我在表单中有复选框。这些复选框是动态创建的人员列表,因为此列表取决于谁登录。例如,对于主管视图,它只会列出您的下属。

我不确定我是否遗漏了什么,但 SO 中的文档和其他答案都说您必须拥有输入的 id 才能检索表单数据,但在我的情况下,我使用了列表中人员的 ID 以提供复选框元素的名称。所以我的复选框名称就像input-{{person_id}}

现在在 post 方法中,我不确定如何检索表单中的复选框。尝试使用self.__dict__,但我似乎找不到任何可以使用的东西

link1 - 指定名称

link2 - 这也表示应该预先确定 ID

link3 - 文档还说如果不包含参数,则会返回一个空列表

也许有一种解决方法,我只需获取表单中的所有元素并让它们在龙卷风中看到?也许使用 javascript?

【问题讨论】:

  • 不是id,而是name 属性是检索表单输入值所必需的。 id 永远不会发送到服务器,它只是用于浏览器端的东西。
  • 哦,拍摄,错误信息。我会纠正它。但是,我仍然不确定如何访问所有勾选的复选框,因为我不知道他们的名字是什么。

标签: javascript python-3.x tornado


【解决方案1】:

我弄错了,似乎如果您为您创建的所有动态复选框的复选框元素使用相同的名称,那么当您将其提交给 tornado web 处理程序时,它将获得所有那些复选框的值有这个名字。

使用 get_arguments 检索值

【讨论】:

    【解决方案2】:

    这是你的意思吗?

    HTML

    <form>
      <input type="checkbox" id="box1" name="Name1" checked>
      <label for="box1">Name 1</label>
      <input type="checkbox" id="box2" name="Name2">
      <label for="box2">Name 2</label>
    </form>
    

    jQuery

    $("form input[type='checkbox']").each(function() {
      console.log($(this).attr('name'))
    })
    

    输出

    "Name1"
    "Name2"
    

    【讨论】:

    • tnx 为您的回复。我的问题是我无法访问后端勾选的复选框。
    【解决方案3】:

    您可以循环遍历request.body_arguments 属性; dict 将参数名称映射到值列表(以支持单个名称的多个值)。

    class MyHandler(tornado.web.RequestHandler):
    
        def post(self):
            for key, value in self.request.body_arguments.items():
                print(f"key {key} has value: {value}")
            ...
    

    还有arguments(同时保存查询和正文参数)和query_arguments(只保存查询参数)属性;你可以查看文档here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      相关资源
      最近更新 更多