Question

J'utilise ce code pour ma pagination, et j'aimerais que le choix de l'utilisateur soit persistant sur tout le site (cela a été résolu jusqu'à présent) ... le seul problème est que la variable de session est maintenant permanente jusqu'à ce que la session soit effacée en fermant le navigateur. Aussi, comment puis-je obtenir les pages adjacentes affichées ... comme dans la pagination Django de style digg. Je n'ai pas réussi à comprendre comment implémenter cela dans mon code.

Le code est le suivant:

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

Puis, dans mon modèle, j'ai ceci pour rendre les liens de pagination:

<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>
Était-ce utile?

La solution

Vous pouvez y parvenir en activant des sessions.

Je vous recommande de lire le chapitre Sessions, utilisateurs et enregistrement sur le site. site djangobook.

Éditer: Maintenant que vous avez activé les sessions, je pense que le problème vient des hyperliens du modèle. Utilisez un et commercial pour séparer plusieurs paramètres dans une URL, par exemple

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

Edit 2: Je ne suis pas sûr de comprendre le problème de l'expiration de la session. La ligne définissant l’expiration de la session à la fermeture du navigateur est request.session.set_expiry (0) . Consultez la documentation Django sur Utilisation de sessions dans les vues si vous voulez changer cela.

Pour créer une pagination de style Digg, vous devez écrire une fonction prenant le numéro de page actuel et le nombre total de pages, puis renvoyant une liste de numéros de page. Ensuite, dans le modèle, parcourez les numéros de page et créez des liens vers les pages.

Une liste de listes de numéros de page vous permettrait de diviser les numéros de page en groupes, par exemple

.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top