2017-08-30 1 views
0

Pyramid session.pop_flash() gibt eine Liste mit allen Elementen, die der Flash-Warteschlange hinzugefügt wurden (nicht sicher, ob es ein praktisches Limit, aber ich habe nicht gesehen). Ich glaube, das basiert direkt auf der flash-Warteschlange von php.Pyramide - Ändern der Sitzung Flash

Wie ändere ich die Flash Queue direkt? Sagen Sie zum Beispiel, dass es drei Elemente gibt, und ich möchte eines davon entfernen (und genau wissen, welches)?

ich es auf diese Weise Zeit zu tun: -

q = request.session.pop_flash() 
q.pop(index_that_I_want_removed) 
for element in q: 
    request.session.flash(q) 

Einfach, aber scheint hackish. Gibt es eine elegantere Lösung?

Antwort

0

Die Nachrichten flash sind als undurchsichtige Warteschlange konzipiert. Dies bedeutet First-in-first-out. Sie können die darin enthaltenen Nachrichten nur direkt ändern, wenn Sie die Implementierungsdetails der spezifischen Warteschlange kennen, die verwendet wird. Zum Beispiel in Pyramid SignedCookieSessionFactory die Warteschlange ist in einem bestimmten Schlüssel in der Sitzung gespeichert und Sie könnten es überschreiben. Es gibt jedoch keine allgemeine Lösung, die für beliebige ISession-Implementierungen funktioniert.

Update

Ok ... ich glaube, ich brauche meine Antwort zurückzutreten, nachdem er mit der Dokumentation zu überprüfen. Wenn Sie eine bestimmte Flash-Nachricht ignorieren möchten, müssen Sie dies so tun, wie Sie es bereits tun. Die Antwort von oluwafemi-sule ist nicht korrekt, da sie sich auf die Sitzungsschlüssel/-werte anstatt auf die in der Sitzung gespeicherten Flash-Warteschlangen konzentriert. Die pop_flash gibt eine Liste zurück, die Sie beliebig iterieren können.

+0

Dies scheint jedoch der Antwort von @ oluwafemi-sule zu widersprechen. Und FIFO ist in Ordnung, wenn ich (zum Beispiel) eine request.session.pop_one_flash() oder ähnliche konzeptionelle Funktion haben könnte. –

+0

Ich werde meine Antwort aktualisieren - es ist nicht korrekt - ich hätte hier nicht aus dem Gedächtnis antworten sollen. –

+0

Danke für das Update. Ja, ich dachte mir, die andere Antwort ergab keinen Sinn, da sie nicht auf den Blitz Bezug nahm. Scheint so, als gäbe es keine andere Möglichkeit als die, wie ich es gemacht habe .... –