Seite 1 von 1

FieldStorage class und items()

Verfasst: Donnerstag 27. März 2008, 13:40
von würmchen
Hallo,
hab ein Problem mit der Fieldstorage class. Und zwar hab ich ein Formular in dem manche Felder doppelt vorkommen können. Hier mal ein Beispiel wenn ich ein

Code: Alles auswählen

form = cgi.FieldStorage()
print form
mache
FieldStorage(None, None, [MiniFieldStorage('lig_in_cav', '90'), MiniFieldStorage('cav_in_lig', '90'), MiniFieldStorage('level', '1'), MiniFieldStorage('and_or', 'is'), MiniFieldStorage('mainmenu', 'macromol'), MiniFieldStorage('submenu', 'mol_protein'), MiniFieldStorage('level', '2'), MiniFieldStorage('mainmenu', 'none'), MiniFieldStorage('level', '1'), MiniFieldStorage('and_or', 'and'), MiniFieldStorage('mainmenu', 'none')])
naja, wenn ich jetzt hingehe und versuche meine Formularfelder irgendwie zu ordnen dann würde ich normalerweise dieses FieldStorage mit einer for Schleife durchlaufen und dann jeden einzelnen Eintrag der Reihe nach verarbeiten. Leider funktioniert das nicht, denn wenn ich sowas wie

Code: Alles auswählen

for item in form:
    print item 
mache dann kommt nur das hier raus
lig_in_cav cav_in_lig level and_or mainmenu submenu
dann habe ich in der doku zu fielstorage gesehen das es sowas wie items() gibt, aber dazu muss ich wohl erst ein from mod_python import util machen, und das gibt bei mir eine fehlermeldung das er das _apache modul nicht findet....

Gibt es noch andere Möglichkeiten um an die Datan aus Fieldstorage zu kommen?

Re: FieldStorage class und items()

Verfasst: Donnerstag 27. März 2008, 13:49
von helduel
Moin!
würmchen hat geschrieben:dann habe ich in der doku zu fielstorage gesehen das es sowas wie items() gibt, aber dazu muss ich wohl erst ein from mod_python import util machen, und das gibt bei mir eine fehlermeldung das er das _apache modul nicht findet....
Wenn du kein mod_python benutzt, dann brauchst du auch nicht in deren Doku zu schauen ;-)
Gibt es noch andere Möglichkeiten um an die Datan aus Fieldstorage zu kommen?
Das FieldStorage im cgi-Modul besitzt offensichtlich keine items-Methode, aber du könntest z.B. sowas machen (ungetestet):

Code: Alles auswählen

for key in fieldstorage:
    value = fieldstorage[key]

Verfasst: Donnerstag 27. März 2008, 14:45
von würmchen
Problem was ich bei deiner Methode habe ist, das die Reihenfolge der Felder Verloren geht. Das darf es aber auf keinen Fall...

Was ich brauche ist eigentlich nur über die Elemente zu iterieren... Deshalb dachte ich an eine for schleife wie

Code: Alles auswählen

for (i = 0; i <= len(form); i++):
Aber das geht nicht

Verfasst: Donnerstag 27. März 2008, 15:29
von helduel
würmchen hat geschrieben:Problem was ich bei deiner Methode habe ist, das die Reihenfolge der Felder Verloren geht. Das darf es aber auf keinen Fall...
Ah, ok. Jetzt seh ich erst, dass bei dir Feldnamen auch mehrfach vorkommen können:

Code: Alles auswählen

for item in fieldstorage.list:
    print item