Die Rückwärts-Paginierung mit dem Cursor funktioniert, aber es fehlt ein Element

8

Von suchen Ideen / Alternativen zum Bereitstellen einer Seite / Elementanzahl / Navigation von Elementen, die zu einer GAE-Datenspeicherabfrage passen , könnte ich einen Hinweis finden, wie die Seitennavigation mit einem einzelnen Cursor durch REVERSING ORDER rückgängig gemacht werden kann.

%Vor%

Leider ist es mit diesem Fehler fehlgeschlagen.

  

Traceback (letzter Aufruf zuletzt): Datei   "/Users/reiot/Documents/Works/appengine-ndb-experiment/ndb/query_test.py",   Zeile 32, in testFirst       self.assertEqual (len (Balken), len (baz)) AssertionError: 3! = 2

Ja, ein Element in der Grenze fehlt bei der umgekehrten Abfrage.

%Vor%

Wie kann ich dieses Problem beheben?

    
Ray Yun 20.04.2012, 04:52
quelle

2 Antworten

14

Ok, hier ist die offizielle Antwort. Sie müssen den Cursor wie folgt "umkehren":

%Vor%

Ich wusste das selbst nicht. :-( Ich werde sicherstellen, dass dies in der Dokumentation für fetch_page () angezeigt wird.

    
Guido van Rossum 22.04.2012, 15:02
quelle
2

Der Umgang mit diesen mehreren Cursorn sowie Vorwärts- und Rückwärtsabfragen ist nicht nur zu kompliziert, sondern erlaubt auch kein direktes Paging (siehe Seite 7), mit einer Reihe von Seitenlinks am unteren Rand der Seite wie "& lt; & lt ; 1 2 3 4 5 & gt; & gt; ", da Sie keine Ahnung haben, wie viele Seiten es geben wird.

Aus diesem Grund wäre meine Lösung, die gesamte Ergebnismenge oder zumindest eine signifikante Ergebnismenge, beispielsweise entsprechend 10 Seiten, zu holen und dann einfache Unterteilungen zu machen, um mit Seiten umzugehen. Um Ndb Bandbreite (und Kosten) nicht zu verschwenden, würden Sie zuerst die Ergebnisse mit keys_only=True holen. Nachdem Sie den Satz festgelegt haben, der Ihrer aktuellen Seite entspricht, führen Sie die key.get() für Ihre Entitäten aus. Und wenn Sie möchten, können Sie in Betracht ziehen, die vollständige Liste der Schlüssel in Memcache für ein paar Minuten zu speichern, damit die Abfrage nicht erneut ausgeführt wird, obwohl ich dies bisher nicht für erforderlich gehalten habe.

Dies ist eine Beispielimplementierung:

%Vor%

Es wird eine generic_list_paging -Funktion verwendet, die die Paging-Unterteilungen ausführt und die richtige Unterliste innerhalb der Ergebnismenge extrahiert:

%Vor%

Schließlich, wenn Sie Jinja2 verwenden, ist hier die Paging-Navigation mit dem paging dict:

%Vor%     
patb 10.04.2015 13:39
quelle