Как создать URL-параметры из списка

88
13

У меня есть форма с несколькими полями выбора. Он работает через метод GET.
Пример параметров запроса, сгенерированных формой:


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

Обратите внимание, что есть два параметра "действия". Это происходит из-за множественного выбора.

Я хочу сделать это:


    Сделать параметр из параметров
    Удалите ключ "страницы" из файла dict
    Преобразовать 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


Хорошо работает. Но он не охватывает все возможности, и это определенно не очень питонов.


У вас есть лучшая (более питонская) идея для создания параметров URL из списка?


Спасибо

спросил(а) 2013-07-21T17:40:00+04:00 6 лет, 11 месяцев назад
1
Решение
138

Вы должны быть в состоянии использовать второй параметр дозы, который предлагает urlencode:


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


Итак, в принципе, вы можете передать словарь списков в urlencode так:

urllib.urlencode(params, True)

И он пойдет правильно.

ответил(а) 2013-07-21T19:13:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема