В документах Django говорится по http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict.iteritems этоQueryDict.iteritems()
использует ту же логику последнего значения как QueryDict.__getitem__()
, что означает это, если ключ имеет больше чем одно значение, __getitem__()
возвращает последнее значение.
Скажем, print request.GET
похож на это:
Если я хочу получить строку как sex=1&status=1&status=2&status=3&status=4
(стандартный HTTP ПОЛУЧАЕТ материал), следующий код не даст желаемые результаты из-за iteritems
поведение упомянуло выше:
mstring = []
for gk, gv in request.GET.iteritems():
mstring.append("%s=%s" % (gk, gv))
print "&".join(mstring)
Что самый эффективный путь состоит в том, чтобы получить результат, который я хочу без слишком большого цикличного выполнения?
С уважением.
[Править]
Я должен упомянуть, что не обращаюсь к QueryDict.urlencode()
потому что существуют некоторые ключи в том запросе. ПОЛУЧИТЕ это, я не хочу в строке. Я мог изменить строку и вынуть те key=value, но просто задающийся вопросом, существует ли лучший способ пойти об этом. Я понимаю, что эта информация должна была быть явно упомянута.
Это должно работать:
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)
request.META['QUERY_STRING']
даст полную строку запроса
или если вы хотите получить список значений для заданного ключа ex: list of values for status then
request.GET.getlist('status')
Я считаю, что QueryDict.urlencode достигает желаемого результата, если все, что вы хотите сделать, это распечатать QueryDict, то просто
print request.GET.urlencode()
должно сработать. Дайте мне знать, если вы пытались сделать что-то другое, и я постараюсь помочь!