La documentación de Django decir en http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict.iteritems que QueryDict.iteritems()
utiliza la misma lógica último valor como QueryDict.__getitem__()
, lo que significa que si la clave tiene más de un valor, __getitem__()
devuelve el último valor.cómo obtener todos los valores de una clave de varios valores de Django request.GET QueryDict
Digamos print request.GET
se parece a esto:
<QueryDict: {u'sex': [u'1'], u'status': [u'1', u'2', u'3', u'4']}>
Si quiero obtener una cadena como sex=1&status=1&status=2&status=3&status=4
(estándar HTTP GET cosas) el siguiente código no dará los resultados deseados debido al comportamiento iteritems
mencionado anteriormente:
mstring = []
for gk, gv in request.GET.iteritems():
mstring.append("%s=%s" % (gk, gv))
print "&".join(mstring)
¿Cuál es la forma más eficiente de obtener el resultado que quiero sin demasiados bucles?
Atentamente.
[EDIT]
debo mencionar que no estoy recurriendo a QueryDict.urlencode()
porque hay algunas teclas en que request.GET que no quiero en la cadena. Podría alterar la cadena y sacar esa clave = valor, pero me pregunto si hay una mejor manera de hacerlo. Me doy cuenta de que esta información debería haberse mencionado explícitamente.
Perfecto. Gracias. – chefsmart
Hay un 'request.GET.iterlists()'. También creo que el enfoque de la respuesta de David a continuación es más claro. – Ski
@Ski: De acuerdo. Es por eso que lo voté a la vez :-) Aún así, no ayuda si quiere filtrar un subconjunto de claves antes de la codificación. – elo80ka