Frage

Ich verwende diesen Code für meine Paginierung, und ich würde die Auswahl des Benutzers in der gesamten Website persistent sein will (dies bisher gelöst worden ist) ... das einzige Problem ist jetzt, dass die Session-Variablen jetzt permanent bis die Sitzung durch Schließen des Browsers gelöscht. Auch, wie kann ich die benachbarten Seiten angezeigt bekommen ... wie im digg-Stil Django paginator. Ich habe nicht in der Lage gewesen, einen Sinn zu geben, wie dies in meinen Code zu implementieren.

Der Code lautet wie folgt:

from django.core.paginator import Paginator, InvalidPage, EmptyPage

def paginate(request, object_list, paginate_by=10):
   try:
      if "per_page" in request.session:
        per_page = request.session["per_page"]
      else:
        request.session["per_page"] = int(request.REQUEST['p'])
        per_page = request.session["per_page"]
        request.session.set_expiry(0)
   except:
      per_page = 10

   paginator = Paginator(object_list, per_page)

   try:
      page = int(request.GET.get('page', '1'))
   except ValueError:
      page = 1

   try:
      items = paginator.page(page)
   except (EmptyPage, InvalidPage):
      items = paginator.page(paginator.num_pages)

   return items

Dann in meiner Vorlage Ich habe dies die Paginierung Links zu machen:

<div class="pagination" align="center"> 
 <span class="step-links"> 
  {% if items.has_previous %} 
    <a href="?page={{ items.previous_page_number }}">previous</a> 
  {% endif %} 
  <span class="current"> 
    Page {{ items.number }} of {{ items.paginator.num_pages }} 
  </span> 
  {% if items.has_next %} 
    <a href="?page={{ items.next_page_number }}">next</a> 
  {% endif %} 
 </span> 
</div>
War es hilfreich?

Lösung

Sie können dies erreichen, indem Sitzungen zu ermöglichen.

Ich empfehle die Lektüre durch die Kapitel Sitzungen, Benutzer und Registrierung auf die djangobook Website.


Edit: Nachdem Sie jetzt aktiviert Sitzungen, ich denke, das Problem die Hyperlinks in der Vorlage ist. Verwenden Sie ein kaufmännischen mehrere Parameter in einer URL zu trennen, zum Beispiel

 <a href="?p={{ request.session.per_page }}&page={{ items.next_page_number }}">next</a> 

Edit 2: Ich bin nicht sicher, ob ich verstehe, was das Problem mit der Sitzung Ablauf ist. Die Linie, die die Sitzung setzt auslaufen, wenn der Browser geschlossen ist request.session.set_expiry(0). Siehe die django docs auf Mit Sessions in Aussicht , wenn Sie das ändern wollen.

Um einen Digg Stil paginator zu machen, müssen Sie eine Funktion schreiben, die die aktuelle Seitenzahl und die Gesamtzahl der Seiten nehmen, und gibt eine Liste von Seitenzahlen. Dann wird in der Vorlage, eine Schleife durch die Seitenzahl und bauen Links zu den Seiten.

Eine Liste von Listen von Seitenzahlen Sie erlauben würde, die Seitenzahl in Gruppen aufteilen, zB

[[1,2], [20,21,22,23,24], [30,31]]

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top