Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Django';s request.GET QueryDict_Django - Fatal编程技术网

如何从Django';s request.GET QueryDict

如何从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行为,下面的代码不会给出所需的结果

Django文档说,
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'