python - 从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 完成这个的标准方法?
解决方案
来源: 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": "..."
}
}
玩得开心。