Les docs Django disent à http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict.iteritems que QueryDict.iteritems()
utilise la même logique de dernière valeur que QueryDict.__getitem__()
, ce qui signifie que si la clé a plus d'une valeur, __getitem__()
renvoie la dernière valeur.comment obtenir toutes les valeurs d'une clé à valeurs multiples de la requête Django. GET QueryDict
Disons que print request.GET
ressemble à ceci:
<QueryDict: {u'sex': [u'1'], u'status': [u'1', u'2', u'3', u'4']}>
Si je veux obtenir une chaîne comme sex=1&status=1&status=2&status=3&status=4
(commandes standard HTTP GET) le code suivant ne donnera pas les résultats escomptés en raison du comportement iteritems
mentionné ci-dessus:
mstring = []
for gk, gv in request.GET.iteritems():
mstring.append("%s=%s" % (gk, gv))
print "&".join(mstring)
Quel est le moyen le plus efficace pour obtenir le résultat que je veux sans trop de bouclage?
Cordialement.
[EDIT]
Je dois dire que je ne suis pas le recours à QueryDict.urlencode()
parce qu'il ya des clés dans ce request.GET que je ne veux pas dans la chaîne. Je pourrais modifier la chaîne et retirer ces clés, mais je me demandais simplement s'il y avait une meilleure façon de procéder. Je réalise que cette information aurait dû être explicitement mentionnée.
Parfait. Merci. – chefsmart
Il existe un 'request.GET.iterlists()'. Aussi je pense que l'approche par la réponse de David ci-dessous est plus propre. – Ski
@Ski: D'accord. C'est pourquoi je l'ai upvoted :-) Pourtant, n'aide pas si vous voulez filtrer un sous-ensemble de clés avant l'encodage. – elo80ka