2017-02-10 6 views
0

Ich verbessere meine Django project mit Seitenumbruch, um das Abfrageergebnis Seite für Seite anzuzeigen. Dank @neverwalkaloner für die Hilfe: Create several pages from arrayDjango Paginierung zeigt nicht alle Seiten

Aber ich bekomme einen unlösbaren Fehler. Ich kann die erste Seite anzeigen und es funktioniert ziemlich gut, aber wenn ich die nächste Seite wähle, wird sie nicht mit den nächsten Ergebnissen angezeigt.

Wie Sie sehen können:

Erste Seite

enter image description here

Zweite Seite

enter image description here

Das ist meine Ansicht:

@login_required 
def Table_annuelle_BirthCertificate(request) : 

    query_naissance = request.GET.get('q1') 
    request.session['query_naissance'] = query_naissance 

    if query_naissance : 
     query_naissance_list = BirthCertificate.objects.filter(created__icontains=query_naissance).order_by('lastname') 
    else : 
     query_naissance_list = BirthCertificate.objects.none() # == [] 

    paginator = Paginator(query_naissance_list, 3) 
    page = request.GET.get('page', 1) 

    try: 
     query_naissance_list = paginator.page(page) 
    except PageNotAnInteger: 
     query_naissance_list = paginator.page(1) 
    except EmptyPage: 
     query_naissance_list = paginator.page(paginator.num_pages) 

    context = { 
     "BirthCertificate":BirthCertificate, 
     "query_naissance" : query_naissance, 
     "query_naissance_list" : query_naissance_list, 
     "PageNotAnInteger":PageNotAnInteger, 
     } 

    return render(request, 'annuel.html', context) 

Und meine Vorlage:

<h4 class = "col-sm-10"> <b><font color="#0083A2"> <span class="glyphicon glyphicon-user"></span> Prévisualisation de la table annuelle des naissances </b></font></h4> 

<form class = "col-sm-10" method="GET" action=""> 
    <input type="text" name="q1" placeholder="Entrer une année" value="{{ request.GET.q1 }}"> &nbsp; 
    <input class="button" type="submit" value="Rechercher"> 
</form> 

<br></br> 
<br></br> 

<table style="width:50%"> 
    <tbody> 
     <tr> 
      <th>Nom & prénom(s)</th> 
      <th>Lieux de Naissance</th> 
      <th>Date des actes</th> 
      <th>Numéro de l'acte</th> 
     </tr> 
     {% for item in query_naissance_list %} 
     <tr> 
      <td> {{item.lastname}} {{item.firstname}} </td> 
      <td> {{item.birthcity}} ({{item.birthcountry.name}}) </td> 
      <td> {{item.created}} <p></p> {{item.birthday}} (Naissance) </td> 
      <td> {{item.id}} </td> 
     </tr> 
     {% endfor %} 
    </tbody> 
</table> 

{% if query_naissance_list.has_previous %} 
<a href="?page={{ query_naissance_list.previous_page_number }}">Page précédente</a> 
{% endif %} 

<span class="current"> 
    Page {{ query_naissance_list.number }} sur {{ query_naissance_list.paginator.num_pages }}. 
</span> 

{% if query_naissance_list.has_next %} 
    <a href="?page={{ query_naissance_list.next_page_number }}">Page suivante</a> 
{% endif %} 

Sie haben eine Idee? Ich überprüfe viele Tutorials und ich finde nicht, wo ich etwas vergessen habe?

+0

Es könnte möglich sein, dass 'query_ness_list = paginator.page (page)' innerhalb der 'try' Block wirft eine Ausnahme, die Sie nicht sehen –

+0

Ich habe das @Sayse Beispiel verwendet und es funktioniert. Ich musste jedesmal meine 'q1'-Variable für jede Seite angeben. Ich dachte, es wäre global für alle Seiten und schließlich nicht – Deadpool

Antwort

2

Sie verlieren die GET-Parameter jedes Mal, dass Ihr queryset

query_naissance = request.GET.get('q1') 

Ich bin nicht ganz sicher, wo Sie diese q1 aus, so dass Sie diese müssen entweder enthalten in der get param für den Anker bekommen gibt

<a href="?page={{ query_naissance_list.next_page_number }}&q1={{ request.GET.q1 }}"> 

und

<a href="?page={{ query_naissance_list.previous_page_number }}&q1={{ request.GET.q1 }}"> 

oder einen anderen Weg finden, um get q1 Wert

+0

Benutzer schreibt ein Jahr in das Feld direkt über dem Array. 'q1' entspricht dem Wert als Variable. Das Array zeigt also das Abfrageergebnis für alle Objekte an, die 'date' als' q1'-Wert enthalten. Durch die Paginierung kann ich das Ergebnis Seite für Seite anzeigen. – Deadpool

+1

Es funktioniert mit Ihrer Bearbeitung! Danke :) Ich musste die Variable 'q1' für jede Seite angeben. Ich dachte, es wäre automatisch in meinem Skript. – Deadpool