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)
Run Code Online (Sandbox Code Playgroud)
在没有太多循环的情况下获得我想要的结果的最有效方法是什么?
问候.
[编辑]
我应该提一下,我不会诉诸,QueryDict.urlencode()因为该请求中有一些键.我不想在字符串中.我可以改变字符串并取出那些key =值,但只是想知道是否有更好的方法来解决这个问题.我意识到应该明确提到这些信息.
Ash*_*hok 23
request.META['QUERY_STRING']
Run Code Online (Sandbox Code Playgroud)
将给出完整的查询字符串
或者如果要获取给定密钥ex的值列表:则为状态值列表
request.GET.getlist('status')
Run Code Online (Sandbox Code Playgroud)
elo*_*0ka 13
这应该工作:
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)
Run Code Online (Sandbox Code Playgroud)
我相信QueryDict.urlencode可以实现你想要的结果,如果你想做的只是打印出QueryDict
print request.GET.urlencode()
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.如果您正在尝试做其他事情,请告诉我,我会尽力帮忙!
| 归档时间: |
|
| 查看次数: |
23199 次 |
| 最近记录: |