Domanda

Sto usando questo codice per la mia impaginazione e vorrei che la scelta dell'utente fosse persistente in tutto il sito (questo è stato risolto finora) ... l'unico problema ora è che la variabile di sessione ora è permanente fino a quando la sessione non viene cancellata chiudendo il browser. Inoltre, come posso visualizzare le pagine adiacenti ... come nel paginatore Django in stile digg. Non sono stato in grado di dare un senso a come implementarlo nel mio codice.

Il codice è il seguente:

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

Quindi nel mio modello ho questo per rendere i link di impaginazione:

<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>
È stato utile?

Soluzione

Puoi farlo abilitando le sessioni.

Consiglio di leggere il capitolo Sessioni, utenti e registrazione sul sito web djangobook.


Modifica: ora che hai abilitato le sessioni, penso che il problema siano i collegamenti ipertestuali nel modello. Utilizzare una e commerciale per separare più parametri in un URL, ad esempio

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

Modifica 2: non sono sicuro di capire quale sia il problema con la scadenza della sessione. La riga che imposta la scadenza della sessione alla chiusura del browser è request.session.set_expiry (0) . Consulta i documenti di django su Uso delle sessioni nelle viste se vuoi cambiarlo.

Per creare un paginatore in stile Digg, devi scrivere una funzione che prende il numero di pagina corrente e il numero totale di pagine e restituisce un elenco di numeri di pagina. Quindi, nel modello, scorrere i numeri di pagina e creare collegamenti alle pagine.

Un elenco di elenchi di numeri di pagina consentirebbe di dividere i numeri di pagina in gruppi, ad esempio

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top