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()
是 <dict_itemiterator object at 0x1021178b8>
,还不知道如何检查它。 QUERY_STRING
是 t_from=A&t_to=B&filter_tags=aenean
这不应该发生,对我来说也不会。从request.GET.getlist('filter_tags')
我得到['accumsan', 'alpha', 'aenean']
。您使用的是哪个确切的 Django 版本(补丁版本号)?什么分布?您能否发布您的INSTALLED_APPS
和MIDDLEWARE_CLASSES
的确切内容?您是否尝试重新启动您的runserver
进程?如果这些都没有帮助,您能否尝试制作一个最小的完整示例来演示该问题?
【参考方案1】:
原来我在我完全忘记的 JS 代码中明确使用了 request.GET.filter_tags
:( 已修复它,现在一切运行顺利。
Jon Clements、Burhan Khalid、marcelm,谢谢大家!
【讨论】:
以上是关于Django QueryDict 获取合并的 GET 参数的主要内容,如果未能解决你的问题,请参考以下文章
django rest framework 获取前端参数的几种方式
django.http.request中QueryDict 对象