如何从Django';s request.GET QueryDict
Django文档说,如何从Django';s request.GET QueryDict,django,Django,Django文档说,QueryDict.iteritems()使用与QueryDict.\uuuu getitem\uuuuuuuuu()相同的最后一个值逻辑,这意味着如果键有多个值,\uuuu getitem\uuuuuuuuuuuu()返回最后一个值 让我们假设打印请求。GET如下所示: 如果我想得到一个字符串,比如sex=1&status=1&status=2&status=3&status=4(标准的HTTP获取内容),由于上面提到的iteritems行为,下面的代码不会给出所需的结果
QueryDict.iteritems()
使用与QueryDict.\uuuu getitem\uuuuuuuuu()
相同的最后一个值逻辑,这意味着如果键有多个值,\uuuu getitem\uuuuuuuuuuuu()
返回最后一个值
让我们假设打印请求。GET
如下所示:
如果我想得到一个字符串,比如sex=1&status=1&status=2&status=3&status=4
(标准的HTTP获取内容),由于上面提到的iteritems
行为,下面的代码不会给出所需的结果:
mstring = []
for gk, gv in request.GET.iteritems():
mstring.append("%s=%s" % (gk, gv))
print "&".join(mstring)
在没有太多循环的情况下,获得我想要的结果的最有效方法是什么
问候
[编辑]
我应该提到的是,我不是在求助于
QueryDict.urlencode()
,因为在该请求中有一些我不想在字符串中使用的键。我可以修改字符串并去掉那些key=value,但只是想知道是否有更好的方法来实现这一点。我意识到这些信息应该被明确提及。我相信QueryDict.urlencode可以实现您想要的结果,如果您只想打印QueryDict,那么
print request.GET.urlencode()
我们应该做到这一点。如果你想做别的事,请告诉我,我会尽力帮助你的
request.META['QUERY_STRING']
将给出完整的查询字符串
或者,如果要获取给定键的值列表
例如:状态值列表
request.GET.getlist('status')
这应该起作用:
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)
你可以将查询信息转换成字典 map(int,dict(request.GET)["status"]) 映射(int,dict(request.GET)[“status”]) 很简单!
只需打印(dict(request.GET))django http UTIL中有一个有用的函数,您可以使用:
>>> from django.utils.http import urlencode
>>> print(urlencode({"tag": [1, 2, 3], "sentence":2}, doseq=True))
'tag=1&tag=2&tag=3&sentence=2'
是的,就是这样。但我在最初的帖子中没有提到(我应该提到)request.GET中有一些我不希望出现在字符串中的键。我可以搜索字符串并将其取出,但不知道是否还有其他方法。我将编辑并重新表述我的问题。
data=request.GET.copy()
,然后从数据中删除不需要的内容,然后执行data.urlencode()
。有一个request.GET.iterlists()
。另外,我认为大卫在下面的回答中的方法更干净。@Ski:同意。这就是为什么我对它投了更高的票:-)但是,如果您想在编码之前过滤掉一部分密钥,它仍然没有帮助。
>>> from django.utils.http import urlencode
>>> print(urlencode({"tag": [1, 2, 3], "sentence":2}, doseq=True))
'tag=1&tag=2&tag=3&sentence=2'