python - 如何从列表创建 URL 参数

标签 python django urlencode urllib

我有一个包含多个选择字段的表单。它通过 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/

相关文章:

python - 我无法使用 python 将空字符串转换为整数

python - Django + twitter bootstrap + github 最优雅的方法是什么?

python - 如何根据同一模型中其他字段的值设置django模型字段值

django - 对将应用程序添加到 INSTALLED_APPS 感到困惑

Python 错误 : "ValueError: need more than 1 value to unpack"

python - 没有页面在 scrapy 中被抓取

javascript - 复选框只生效一次

php - 在 URL 中发送阿拉伯字符

api - HTTP URL 路径中分隔符的最佳实践

python - 用python进行简单的ascii url编码