首页 > 解决方案 > 从Django中的GET参数中提取带有索引的数组

问题描述

我的 Django 项目有一个页面,其中包含一个由 DataTables 提供支持的表。在这种情况下,该表使用 Django 视图和 GET http 方法进行服务器端处理。Django 视图将查询字符串解包成一个 QueryDict 对象,我的任务是从这个 QueryDict 中解包表的每一列的 DataTables 参数。请注意,我必须使用 GET,而不是 POST,因为我想将 POST 方法用于实际更改服务器上数据的其他事情。

DataTables 为表格中的每一列提交与搜索字符串和每列排序相关的数据。这些数据是根据他们的文档提交;要点是柱状参数在查询字符串中发送,如下所示:

...&column[5][search][value]=searchme&column[6][search][value]=more&...

我希望以这样的方式解包,结果数据结构看起来像这样:

column = [
    {
        'search': {
            'value': 'searchme'
        }
    },
    ...

]

...按照索引指定的顺序在查询字符串中提交的数组元素。

有没有用 Django 的 QueryDict 完成这个的标准方法?

标签: pythondjangodatatablesgetquery-string

解决方案


来源: https ://gist.github.com/ijharulislam/28e9743e68a165dff0e4d1669644c4ba

def get_html_array(query_dict, param):
    dictionary = {}
    regex = re.compile('%s\[([\w\d_]+)\]' % param)
    for key, value in query_dict.items():
        match = regex.match(key)
        if match:
            inner_key = match.group(1)
            regex_sec = re.compile('%s\[%s\]\[([\w\d_]+)\]' % (param, inner_key))
            match_second = regex_sec.match(key)
            if match_second:
                dictionary[inner_key] = get_html_array(query_dict, '%s\[%s\]' % (param, inner_key))
            else:
                dictionary[inner_key] = value

    return dictionary

如何使用 :

 <form method="post">
   <input type='text' name='search[1][field]'>
   <input type='text' name='search[1][value]'>
   <input type='text' name='search[2][field]'>
   <input type='text' name='search[2][value]'>
   ...
 </form>
searchFields = get_html_array(request.POST, 'search')

你会得到 :

{
  "1": {
    "field": "...",
    "value": "..."
  },
  "2": {
    "field": "...",
    "value": "..."
  }
}

玩得开心。


推荐阅读