从Django中的GET参数中提取带有索引的数组

Posted

技术标签:

【中文标题】从Django中的GET参数中提取带有索引的数组【英文标题】:Extracting array with indices from GET parameters in Django 【发布时间】:2020-02-06 07:15:24 【问题描述】:

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

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

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

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

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

]

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

有没有使用 Django 的 QueryDict 完成此任务的标准方法?

【问题讨论】:

查看这个包来解析多维查询字符串github.com/bernii/querystring-parser How to parse url params with multidimensional params?的可能重复 是的,您的链接问题非常相似,但有一个关键区别:该问题希望避免使用 Django,而我正在寻找 Django 解决此问题的方法。 【参考方案1】:

来源: 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": "..."
  

玩得开心。

【讨论】:

【参考方案2】:

看起来 Django 没有实现这一点。在这一点上,看起来我唯一的选择是:

    使用库(如 Satendra 在他们对该问题的评论中建议的),或 编写一个自定义解析器,该解析器可以处理原始查询字符串或 Django 基于类的视图中已经可用的 QueryDict 对象,或者 更改发送到 Django 视图的数据,使其不是多维的。

在这种情况下,我选择了第三个选项;我正在修改 DataTables 发送到服务器的数据,以便它可以直接传递给未修改的 FilterSet 或 Form 类构造函数。

【讨论】:

以上是关于从Django中的GET参数中提取带有索引的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Django 中的 GET 参数创建漂亮的 url?

在 django 模板中索引 QuerySet 数组

从 C++ 中的字节数组中提取非零索引的最快方法是啥

从 BigQuery 数据 JSON 中的数组中提取索引值

php 数组索引值如何重新从0开始递增

如何从 Javascript 中的 URL 中提取 GET 参数? [复制]