Elemente in der Liste werden überschrieben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
LukLuk
User
Beiträge: 11
Registriert: Montag 22. Juni 2015, 14:36

Hallo zusammen,

ich schreibe gerade ein kleines Script um Daten aus einer LDAP Datenbank auszulesen und im Browser anzuzeigen.
Dafür benützte ich Flask. Ich schreibe alle LDAP-Einträge in ein WTForms-form und speicher diese dann in eine Liste ab, die dann der Webseite übergeben wird. Jedoch werden jetzt, jedesmal wenn ich ein neues Element der Liste hinzufüge, die alten Einträge mit dem neuen Element überschrieben.

Code: Alles auswählen

def displayApplications():
    forms=[]
    entrys=showRegistrations()
    for entry in entrys:

        tempForm=DisplayForm()
        tempForm.name.text=entry['cn']
        tempForm.bereich.text=entry['o']
        tempForm.unterbereich.text=entry['ou']
        tempForm.email.text=entry['mail']
        tempForm.mobile.text=entry['mobile']

        forms.append(tempForm)
        for f in forms:
            print f.name


    return render_template('indexPrev.html',forms=forms)
Die Ausgabe der for-Schleife:
<label for="name">Max Mustermann</label>
<label for="name">Anna Musterfrau</label>
<label for="name">Anna Musterfrau</label>
<label for="name">Peter Mustersohn</label>
<label for="name">Peter Mustersohn</label>
<label for="name">Peter Mustersohn</label>

Die Displayfrom-Klasse:

Code: Alles auswählen

class DisplayForm(Form):
    name=Label('name','')
    bereich=Label('bereich','')
    unterbereich=Label('unterbereich','')
    mobile=Label('mobile','')
    email=Label('email','')
Liegt das Problem daran das ich die Listen von Python noch ned richtig verstanden hab (wenn das so ist bitte meinen Denkfehler erklären) oder ist da ein anderer Fehler?

Danke schoneinmal im Vorraus.
BlackJack

@LukLuk: Ich würde sagen Du hast Schleifen nicht verstanden, denn die Schachtelung macht *so* IMHO keinen Sinn und passt soweit ich das sehe auch nicht zu der gezeigten Ausgabe.
LukLuk
User
Beiträge: 11
Registriert: Montag 22. Juni 2015, 14:36

Die zweite Schleife ist nur dazu da um zu zeigen welche Elemente in der forms-Liste sind.
BlackJack hat geschrieben:Ich würde sagen Du hast Schleifen nicht verstanden, denn die Schachtelung macht *so* IMHO keinen Sinn und passt soweit ich das sehe auch nicht zu der gezeigten Ausgabe.
Ich hab die Ausgaber aus der Konsole in das Forum kopiert.

OK ich hab noch vergessen zu sagen das die Funktion "showRegistration" eine Liste von Dictinarys zurückgibt.
BlackJack

@LukLuk: Mir ist schon klar wozu die zweite Schleife da ist, aber die ist trotzdem an der falschen Stelle und passt wirklich nicht zu der gezeigten Ausgabe.

Und interessant wäre vielleicht auch eine Ausgabe der Inhalte von den Wörterbüchern *vor* der Schleife um sicher zu stellen das *dort* nicht schon der/ein Fehler liegt.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Ausgabe würde passen, wenn Zeile 6 vor Zeile 4 stehen würde.
@LukLuk: bist Du sicher, dass Du den passenden Code zur Ausgabe gepostet hast?
LukLuk
User
Beiträge: 11
Registriert: Montag 22. Juni 2015, 14:36

BlackJack hat geschrieben:Und interessant wäre vielleicht auch eine Ausgabe der Inhalte von den Wörterbüchern *vor* der Schleife um sicher zu stellen das *dort* nicht schon der/ein Fehler liegt.
Ich hab nachgeschaut, da ist noch alles richtig.
BlackJack hat geschrieben: die zweite Schleife da ist, aber die ist trotzdem an der falschen Stelle
Welche Stelle ist den richtig. Nach der For-Schleife sind doch schon alle Elemente überschrieben.
BlackJack hat geschrieben: passt wirklich nicht zu der gezeigten Ausgabe
Naja wie ich gesagt hab, ich hab das direkt aus der Konsole in das Forum kopiert.
BlackJack

@LukLuk: Nach der ``for``-Schleife wäre eigentlich richtig. Ansonsten wäre die Frage ob diese `Form`-Klasse irgendwelche Magie veranstaltet um ein Singleton zu sein.

Edit: Ist `text` überhaupt das richtige Attribut? Nur jetzt so aus dem Kopf: Müsste das nicht `data` sein was die *Daten* zu einem Feld im Form enthält‽
Antworten