Python by Nooto.de
Nooto / Python / Webscripte / Django
topic: Python Django Paginator Script Scripte




» Nooto
»  Python
»  Wiki

weitere Scripte
» FormMail mit Ajax
» Simple FormMailer

» zu den Favoriten
» weiterempfehlen
» Impressum
» Kontakt

Pfad: Python > Webscripte > Django

Google-Style Pagination für Django

Django bietet in seinem Standard-Paginator lediglich rudimentäre Möglichkeiten, die für eine zeitgemäße Pagination nicht ausreichen, sofern man sich nur auf diese Möglichkeiten stützt.

Es gibt mehrere Lösungsansätze wie die Digg-Style-Pagination, die mir persönlich allesamt wenig zusagen.

Eine Google-Style-Pagination war das, was ich gesucht habe – und nicht gefunden.


Google-like Pagination mit etwas mehr Style.

Die Funktion »page-nav« berechnet nur zwei Listen, die die Seitenzahlen vor und hinter der aktuellen Seite halten.

def page_nav(current, last, buffer):
    mb = 2*buffer
    
    vor = min(current-1, max(mb-min(buffer, last-current), buffer))
    nach = min(last-current, max(mb-min(buffer, current-1), buffer))
    
    vor_liste = [n+current-vor for n in range(vor)]
    nach_liste = [n+current+1 for n in range(nach)]
    
    return vor_liste, nach_liste
Die Funktion braucht drei Argumente.
current: die aktuelle Seite, aus objekt.number
last: die letzte Seite, aus paginator.num_pages
buffer: Anzahl von gelieferten Seiten vor und nach der aktuellen

Beispiel

Bei einem Aufruf

vor, nach = page_nav(9, 20, 4)

steht in vor [5,6,7,8] und in nach [10,11,12,13]

Siehe Bild oben.

Bei einem Aufruf

vor, nach = page_nav(3, 20, 4)

steht in vor [1,2] und in nach [4,5,6,7,8,9]

Alles, was vorne nicht passt, wird hinten draufgerechnet (und umgekehrt), so dass nach Möglichkeit die Länge der Navigation gleich bleibt.

Diese Listen werden mit tels responsedict an das Template übergeben.

Eingebaut ist diese Google-Style-Pagination zum Beispiel bei Blog über Waschmaschinen

Ihr könnt selbst ausprobieren wie es sich anfühlt.







© MediaDialog Topolewski Bielefeld | Python by Nooto.de