Handling Django request.GET und mehrere Variablen für denselben Parameternamen

In einer Django-Ansicht usw. können Sie auf das @ zugreife request.GET ['variablename'], also aus Ihrer Sicht können Sie Folgendes zurückgeben:

myvar = request.GET['myvar']

Der tatsächliche Objekttyp request.GET ['myvar'] lautet:

<class 'django.http.QueryDict'>

Nun, wenn Sie mehrere Variablen mit demselben Parameternamen übergeben möchten, d. H.

http: //example.com/blah/? myvar = 123 & myvar = 567

Mit anderen Worten, Sie möchten eine Pythonaufführe für den Parameter @ zurückgegeb myvar

Im Wesentlichen, was ich tun möchte, ist so etwas

 for var in request.GET['myvar']:
     print var

Wenn Sie jedoch versuchen, dass Sie nur den letzten in der URL übergebenen Wert erhalten, d. H. Im obigen Beispiel, erhalten Sie 567

und das Ergebnis in der Shell ist:

5
6
7

Wenn Sie jedoch einen Ausdruck von request.GET machen, scheint es, als hätte es eine Liste, d. H .:

<QueryDict: {u'myvar': [u'123', u'567']}>

OK Update: Es wurde entwickelt, um den letzten Wert zurückzugeben. Mein Anwendungsfall ist, dass ich eine Liste benötige.

von Django Docs:

QueryDict. getitem (Schlüssel) Gibt den Wert für den angegebenen Schlüssel zurück. Wenn der Schlüssel mehr als einen Wert hat, getitem () gibt den letzten Wert zurück. Löst django.utils.datastructures.MultiValueDictKeyError aus, wenn der Schlüssel nicht vorhanden ist. (Dies ist eine Unterklasse von Pythons Standard-KeyError. Sie können sich also daran halten, KeyError @ zu fange

QueryDict.getlist (key) Gibt die Daten mit dem angeforderten Schlüssel als Python-Liste zurück. Gibt eine leere Liste zurück, wenn der Schlüssel nicht existiert. Es ist garantiert, dass eine Liste zurückgegeben wird.

Update: Wenn jemand weiß, warum Django-Entwickler dies getan haben, lassen Sie es mich bitte wissen. Es scheint nicht intuitiv zu sein, eine Liste anzuzeigen, und sie verhält sich nicht wie eine. Nicht sehr pythonisch!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage