从request.GET中排除参数的最佳方法是什么?
例如,给定一个网址参数?a=a&b=b&c=c
并且我想取出参数b来生成?a=a&c=c
的网址参数而不更改request.GET
现在我循环通过键取出b
params = {}
for key,value in request.GET.items():
if not key == 'b':
params[key] = value
url = urllib.urlencode(params)
我想知道是否有更好,更优雅的方式来达到同样的效果?例如
request.GET.urlencode(exclude=['b',])
甚至更好,
urllib.urlencode(request.GET.exclude('b'...)
答案 0 :(得分:9)
这应该有效:
get = request.GET.copy()
del get['b']
params = urllib.urlencode(get)
答案 1 :(得分:2)
您无法直接操纵request.GET
,因为它是不可变的QueryDict
。
因此,制作浅色副本,然后删除所需的密钥。
cp = request.GET.copy()
cp.pop('b')
params = urllib.urlencode(cp)
答案 2 :(得分:0)
所有这些答案几乎都是正确的,但是对于具有相同键名的多个参数的边缘情况失败,这是有效的(并且django使用QueryDict
而不是{{的全部原因1}})。如果你使用urllib的dict
它会丢失额外的参数,你需要使用urlencode
提供的urlencode。
https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict
QueryDict是一个类似字典的类,用于处理多个 同一个键的值。这是必要的,因为有些HTML表单 元素,尤其是
QueryDict
,传递多个值 对于同一把钥匙。
所以正确的方法是:
<select multiple="multiple">