Wenn Sie die Speicherung von Daten in späteren Anforderung zugreifen möchten, würden Sie es irgendwo speichern. Django bietet mehr Möglichkeiten, dies zu archivieren:
1) Sie sessions verwenden können, um die Abfrage zu speichern: Jeden Besucher, die Ihre Website besucht, wird ein leeres Session-Objekt und Sie können speichern, was Sie in diesem Objekt wünschen, die wirken wie ein Diktat. Nachteil: Ein einzelner Besucher kann nicht gleichzeitig mehrere Suchvorgänge mit Paginierung durchführen.
2) Verwendung von Cookies: Wenn Sie einen Cookie setzen, der auf der Clientseite gespeichert ist, fügt der Browser die Daten des Cookies an jede Anfrage an, auf die Sie zugreifen können. Cookies sind serverfreundlicher, da Sie auf dem Server keinen Sitzungsmanager für sie benötigen, aber die in Cookies gespeicherten Daten sind für den Client sichtbar (und editierbar). Nachteil: wie zuvor.
3) Verwenden Sie versteckte Felder: Sie können ein Formular mit einigen ausgeblendeten Feldern auf Ihrer Suchergebnisseite hinzufügen und die Abfrage darin speichern. Dann sendet der Client die Abfrage erneut, wenn Sie das Formular absenden. Nachteil: Sie müssen ein Formular mit Übermittlungsschaltflächen für die Seitennummerierung auf Ihrer Seite verwenden (einfache Links funktionieren nicht).
4) Erstellen Sie Links, die die Abfrage enthalten: Anstelle von POST können Sie auch GET verwenden. Zum Beispiel könnten Sie einen Link wie "/search/hello+world/?order=votes"
und "paginierte Links" wie "/search/hello+world/2/?order-votes"
haben. Dann kann die Abfrage leicht von der URL abgerufen werden. Nachteil: Die maximale Datenmenge, die Sie über GET senden können, ist begrenzt (das sollte aber für eine einfache Suche kein Problem sein).
5) Verwenden Sie eine Kombination: Sie möchten möglicherweise alle Daten in einer Sitzung oder einer Datenbank speichern und über einen generierten Schlüssel darauf zugreifen, den Sie in die URL eingeben können. . URLs dann wie "/search/029af239ccd23/2"
(für die 2. Seite) aussehen könnte und Sie den Schlüssel verwenden, um eine riesige Menge an Daten zuzugreifen, die Sie vorher gespeichert haben Dies beseitigt den Nachteil der Lösung 1 sowie die der Lösung 4. Neuen Nachteils: viel Arbeit :)
6) Verwenden Sie aJAX: Mit ajax Sie die Daten in einigen js-Variablen auf der Client-Seite speichern kann, die dann zu den anderen Anfragen übergeben kann und da ajax wird nur Ihre Ergebnisliste aktualisieren. Die Variablen gehen nicht verloren.
Danke, das ist hilfreich. Um diese Frage noch ein wenig auszupacken: Ist das der beabsichtigte Einsatz für die Paginator-Klasse? Meine Ansicht verarbeitet das anfängliche Suchformular und sendet dann das Template das paginator.page() - Objekt für die erste Seite. Die Ergebnisliste wird aus der Objektliste für diese Seite generiert. Es ist merkwürdig, dass ich ihm nicht die gesamte Suchergebnismenge senden und irgendwie durchblättern konnte, ohne die Suche für jede Seite erneut einzureichen. Wenn das für den Kurs beabsichtigt ist, kann ich damit arbeiten. Ich möchte nur sicherstellen, dass ich nicht etwas Offensichtliches vermisse. Vielen Dank! – andyashton
Ja, das ist die beabsichtigte Verwendung. Vergessen Sie nicht, dass Django ein Web-Framework ist, und Webanfragen sind aufgrund ihrer Natur nicht zustandsbehaftet. Wenn Sie also den Status beibehalten möchten, müssen Sie ihn irgendwo speichern - und tux21b hat Ihnen einige Möglichkeiten gegeben, wo. –
Sehr hilfreich, danke euch beiden. – andyashton