如何从列表中创建URL参数

时间:2013-07-21 14:40:23

标签: python django urlencode urllib

我有一个包含多个选择字段的表单。它正在通过GET方法。 表单生成的请求参数示例:

action=not-strummed&action=not-rewarded&keywords=test&page=2

请注意,有两个“操作”参数。由于多重选择,这种情况正在发生 我想做的是:

  • 从参数
  • 创建一个dict
  • 从字典中删除“page”键
  • 将dict转换回参数字符串

urllib.urlencode()不够智能,无法从列表中生成url参数。

例如:

{
     "action": [u"not-strummed", u"not-rewarded"]
}

urllib.urlencode()将此dict转换为:

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。

您是否有更好的(更加pythonic)想法从列表中创建url参数?

谢谢

1 个答案:

答案 0 :(得分:13)

您应该能够使用urlencode提供的第二个doseq参数:

http://docs.python.org/2/library/urllib.html

基本上,您可以将列表字典传递给urlencode,如下所示:

urllib.urlencode(params, True)

它会做正确的事情。