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!