我有一个包含多个选择字段的表单。它通过 GET
方法工作。
表单生成的请求参数示例:
action=not-strummed&action=not-rewarded&keywords=test&page=2
请注意,有两个“ Action ”参数。这是因为多重选择而发生的。
我想做的是:
- 根据参数生成字典
- 从字典中删除“page”键
- 将字典转换回参数字符串
urllib.urlencode()
不够智能,无法从列表中生成 url 参数。
例如:
{
"action": [u"not-strummed", u"not-rewarded"]
}
urllib.urlencode() 将这个字典转换为:
action=%5Bu%27not-strummed%27%2C+u%27not-rewarded%27%5D
这是完全错误和无用的。
这就是我编写此迭代代码以重新生成 url 参数的原因。
parameters_dict = dict(self.request.GET.iterlists()) parameters_dict.pop("page", None) pagination_parameters = "" for key, value_list in parameters_dict.iteritems(): for value in value_list: pagination_item = "&%(key)s=%(value)s" % ({ "key": key, "value": value, }) pagination_parameters += pagination_item
它运行良好。但它并没有涵盖所有可能性,而且绝对不是很 pythonic。
关于从列表创建 url 参数,你有更好的(更 pythonic 的)想法吗?
谢谢
最佳答案
您应该能够使用 urlencode 提供的第二个 doseq 参数:
http://docs.python.org/2/library/urllib.html
基本上,您可以像这样将列表字典传递给 urlencode:
urllib.urlencode(params, True)
它会做正确的事。
关于python - 如何从列表创建 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17773495/