Django文档在http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict.iteritems上说QueryDict.iteritems()
使用与QueryDict.__getitem__()
相同的最后值逻辑,这意味着如果键具有多个值,则__getitem__()
返回最后一个值。
假设print request.GET
看起来像这样:<QueryDict: {u'sex': [u'1'], u'status': [u'1', u'2', u'3', u'4']}>
如果我想获取类似于sex=1&status=1&status=2&status=3&status=4
(标准HTTP GET内容)的字符串,则由于上述iteritems
行为,以下代码将无法获得预期的结果:
mstring = []
for gk, gv in request.GET.iteritems():
mstring.append("%s=%s" % (gk, gv))
print "&".join(mstring)
在没有太多循环的情况下获得我想要的结果的最有效方法是什么?
问候。
[编辑]
我应该提一下,我没有求助于
QueryDict.urlencode()
,因为该request.GET中有一些我不需要的键。我可以更改字符串并取出那些key = value,但是只是想知道是否有更好的方法可以解决此问题。我意识到应该明确提及这些信息。
最佳答案
这应该工作:
mstring = []
for key in request.GET.iterkeys(): # "for key in request.GET" works too.
# Add filtering logic here.
valuelist = request.GET.getlist(key)
mstring.extend(['%s=%s' % (key, val) for val in valuelist])
print '&'.join(mstring)
关于django - 如何从Django的请求中获取多值键的所有值。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3324009/