Как получить все значения многозначного ключа из запроса Django.GET QueryDict - PullRequest
17 голосов
/ 24 июля 2010

Документы Django говорят в http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict.iteritems, что QueryDict.iteritems() использует ту же логику последнего значения, что и QueryDict.__getitem__(), что означает, что если ключ имеет более одного значения, __getitem__() возвращает последнее значение.

Допустим, print request.GET выглядит так:

<QueryDict: {u'sex': [u'1'], u'status': [u'1', u'2', u'3', u'4']}>

Если я хочу получить строку типа sex=1&status=1&status=2&status=3&status=4 (стандартный HTTP GET), следующий код не даст желаемых результатов из-за поведения iteritems, упомянутого выше:

mstring = []
for gk, gv in request.GET.iteritems():
    mstring.append("%s=%s" % (gk, gv))
print "&".join(mstring)

Какой самый эффективный способ получить желаемый результат без особых циклов?

Привет.

[EDIT]

Я должен отметить, что я не прибегаю к QueryDict.urlencode(), потому что в этом запросе есть несколько ключей. ПОЛУЧИТЕ, что я не хочу в строке. Я мог бы изменить строку и вывести эти key = value, но просто подумал, есть ли лучший способ сделать это. Я понимаю, что эта информация должна была быть явно упомянута.

Ответы [ 6 ]

23 голосов
/ 24 июля 2010
request.META['QUERY_STRING']

выдаст полную строку запроса

или если вы хотите получить список значений для данного ключа например: список значений для статуса затем

request.GET.getlist('status')
13 голосов
/ 24 июля 2010

Это должно работать:

mstring = []
for key in request.GET.iterkeys():  # "for key in request.GET" works too.
    # Add filtering logic here.
    valuelist = request.GET.getlist(key)
    mstring.extend(['%s=%s' % (key, val) for val in valuelist])
print '&'.join(mstring)
8 голосов
/ 24 июля 2010

Я считаю, что QueryDict.urlencode достигает желаемого результата, если все, что вы хотите сделать, это распечатать QueryDict, а затем просто

print request.GET.urlencode()

должен сделать свое дело. Дайте мне знать, если вы пытаетесь сделать что-то еще, и я постараюсь помочь!

6 голосов
/ 24 июля 2010
request.GET.getlist('status')
1 голос
/ 19 августа 2018

Это просто! Всего print(dict(request.GET))

0 голосов
/ 20 августа 2013

вы можете привести квест в словарь

map(int,dict(request.GET)["status"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...