处理Django request.GET和多个variables为相同的参数名称
在Django视图等你可以访问request.GET ['variablename'] ,所以在你的观点,你可以返回做这样的事情:
myvar = request.GET['myvar']
实际的request.GET ['myvar']对象types是:
<class 'django.http.QueryDict'>
现在,如果你想传递相同的参数名称,即多个variables
http://example.com/blah/?myvar=123&myvar=567
换句话说,你想为参数myvar返回一个python 列表
基本上我想要做的就是这样的事情
for var in request.GET['myvar']: print var
然而,当你尝试,你只能得到最后一个值在URL中传递,即在上面的例子中,你将得到567
在shell中的结果是:
5 6 7
但是,当你做一个request.GET打印好像它有一个列表,即:
<QueryDict: {u'myvar': [u'123', u'567']}>
确定更新:它的目的是返回最后一个值,我的用例是我需要一个列表。
来自django文档:
的QueryDict。 getitem (key)返回给定键的值。 如果键值不止一个, getitem ()返回最后一个值。 如果键不存在,则引发django.utils.datastructures.MultiValueDictKeyError。 (这是Python的标准KeyError的一个子类,所以你可以坚持捕获KeyError
QueryDict.getlist(key)以Python列表的forms返回包含请求键的数据。 如果键不存在,则返回空列表。 保证返回某种列表。
更新:如果有人知道为什么Django的开发者已经这样做,请让我知道,似乎反直觉显示一个列表,它不像一个行为。 不是非常pythonic!
你需要GET对象的getlist()函数:
request.GET.getlist('myvar')
另一个解决scheme是创build请求对象的副本…通常,您不能遍历request.GET或request.POST对象,但是您可以在副本上执行这样的操作:
res_set = request.GET.copy() for item in res_set['myvar']: item ...