Django QueryDict 获取合并的 GET 参数

Posted

技术标签:

【中文标题】Django QueryDict 获取合并的 GET 参数【英文标题】:Django QueryDict gets merged GET parameters 【发布时间】:2016-10-29 07:32:29 【问题描述】:

Django 1.9、Python 3.5.1。

我的表单中有 Select2 输入,它将其数据存储在 filter_tags 参数中。 我可以在服务器日志中看到类似的内容:

[...] "GET /events?t_from=A&t_to=B&filter_tags=accumsan&filter_tags=alpha&filter_tags=aenean HTTP/1.1" 200 12290

但是,当我尝试访问 request.GET 的 QueryDict 时,我发现它没有包含三个值的列表,而是只有最后一个值:

<QueryDict: 't_from': ['A'], 'filter_tags': ['aenean'], 't_to': ['B']>

所以request.GET.getlist('filter_tags') 只是最后一项。

我以manage.py runserver 启动 Django,并且在它前面不使用任何类型的 Web 服务器(例如 nginx、apache)。我试图禁用所有的中间件,但这并没有帮助。我也不会以任何方式操纵 request.GET,基本上我的观点对它没有任何作用:

def my_view(request):
    logging.warning(request.GET)
    ...

如何获得我所有的filter_tags

UPD 手动创建 QueryDict 似乎工作得很好:

q = QueryDict('t_from=A&t_to=B&filter_tags=ac&filter_tags=accumsan')
<QueryDict: 't_from': ['A'], 't_to': ['B'], 'filter_tags': ['ac', 'accumsan']>

【问题讨论】:

你试过QueryDict.lists()吗? request.META['QUERY_STRING'] 的输出是什么? request.GET.lists()&lt;dict_itemiterator object at 0x1021178b8&gt;,还不知道如何检查它。 QUERY_STRINGt_from=A&amp;t_to=B&amp;filter_tags=aenean 这不应该发生,对我来说也不会。从request.GET.getlist('filter_tags') 我得到['accumsan', 'alpha', 'aenean']。您使用的是哪个确切的 Django 版本(补丁版本号)?什么分布?您能否发布您的INSTALLED_APPSMIDDLEWARE_CLASSES 的确切内容?您是否尝试重新启动您的runserver 进程?如果这些都没有帮助,您能否尝试制作一个最小的完整示例来演示该问题? 【参考方案1】:

原来我在我完全忘记的 JS 代码中明确使用了 request.GET.filter_tags :( 已修复它,现在一切运行顺利。

Jon Clements、Burhan Khalid、marcelm,谢谢大家!

【讨论】:

以上是关于Django QueryDict 获取合并的 GET 参数的主要内容,如果未能解决你的问题,请参考以下文章

django rest framework 获取前端参数的几种方式

django QueryDict对象

django 获取查询字符串的参数

django.http.request中QueryDict 对象

Django:从 QueryDict 读取 JSON 对象数组

在 Django 中处理 ajax json 对象 - 'QueryDict' 对象没有属性 'read' 错误