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

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

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

Обратите внимание, что есть два параметра «действие». Это происходит из-за множественного выбора.
Я хочу сделать следующее:

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

Спасибо


person Yiğit Güler    schedule 21.07.2013    source источник
comment
request.GET возвращает dict с параметрами. request.GET['действие'], например.   -  person m9_psy    schedule 21.07.2013
comment
Вы можете прочитать его с помощью .lists()   -  person karthikr    schedule 21.07.2013


Ответы (1)


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

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

Таким образом, вы можете передать словарь списков в urlencode следующим образом:

urllib.urlencode(params, True)

И это будет сделано правильно.

person Taylan Pince    schedule 21.07.2013