Как получить все значения многозначного ключа из запроса Django. GET QueryDict
Документы Django говорят http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict.iteritems, что QueryDict.iteritems()
использует ту же логику последнего значения, что и QueryDict.__getitem__()
, что означает, что if ключ имеет более одного значения, __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()
, потому что в этом запросе есть несколько ключей. GET, которых я не хочу в строке. Я мог бы изменить строку и вывести этот ключ = значение, но просто интересно, есть ли лучший способ сделать это. Я понимаю, что эта информация должна быть явно упомянута.
Ответы
Ответ 1
Это должно работать:
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)
Ответ 2
request.META['QUERY_STRING']
даст полную строку запроса
или если вы хотите получить список значений для заданного ключа
ex: список значений для статуса, затем
request.GET.getlist('status')
Ответ 3
Я считаю, что QueryDict.urlencode достигает желаемого результата, если все, что вы хотите сделать, это распечатать QueryDict, а затем просто
print request.GET.urlencode()
должен сделать трюк. Дайте мне знать, если вы пытаетесь сделать что-то еще, и я постараюсь помочь!
Ответ 4
request.GET.getlist('status')
Ответ 5
Это легко! Просто print(dict(request.GET))
Ответ 6
вы можете включить querydict в словарь
map(int,dict(request.GET)["status"])