从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参数中提取带有索引的数组的主要内容,如果未能解决你的问题,请参考以下文章