Django Paginator的问题

时间:2018-01-29 14:45:55

标签: django pagination

我试图根据我的Django Paginator流程使用CBV,但我没有克服用我的数组显示网页。

我的班级看起来像:

class IdentityIndividuResearchingView(LoginRequiredMixin, ListView) :

    template_name = 'Identity_Individu_Recherche.html'
    model = Individu
    context_object_name = 'queryset'


    def get_object(self) :

        queryset = Individu.objects.order_by("-id")
        return queryset

    def get_context_data(self, **kwargs) :

        context_data = super(IdentityIndividuResearchingView, self).get_context_data(**kwargs)

        person_France = Individu.objects.filter(Pays='FR')
        context_data['person_France'] = person_France

        if 'recherche' in self.request.GET:

            query_lastname_ID = self.request.GET.get('q1ID')
            query_firstname_ID = self.request.GET.get('q1bisID')
            query_naissance_ID = self.request.GET.get('q1terID')

            sort_params = {}

            lib.Individu_Recherche.set_if_not_none(sort_params, 'Nom__icontains', query_lastname_ID)
            lib.Individu_Recherche.set_if_not_none(sort_params, 'Prenom__icontains', query_firstname_ID)
            lib.Individu_Recherche.set_if_not_none(sort_params, 'VilleNaissance__icontains', query_naissance_ID)

            query_ID_list = Individu.objects.filter(**sort_params)
            context_data['query_ID_list'] = query_ID_list

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

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

我的模板看起来像这样:

<table class="tableform" style="width:85%">
            <tbody>
                <tr>
                    <th>ID</th>
                    <th>État</th>
                    <th>N° Identification</th>
                    <th>Civilité</th>
                    <th>Nom</th>
                    <th>Prénom</th>
                    <th>Date de Naissance</th>
                    <th>Ville de Naissance</th>
                    <th>Pays de Naissance</th>
                    <th>Institution</th>
                </tr>
                {% for item in query_ID_list %}
                <tr>
                    <td>{{ item.id}}</td>
                    <td>{{ item.Etat}}</td>
                    <td>{{ item.NumeroIdentification}}</td>
                    <td>{{ item.Civilite }}</td>
                    <td>{{ item.Nom }}</td>
                    <td>{{ item.Prenom }}</td>
                    <td>{{ item.DateNaissance }}</td>
                    <td>{{ item.VilleNaissance }}</td>
                    <td>{{ item.PaysNaissance }}</td>
                    <td>{{ item.InformationsInstitution }}</td>
                </tr>
                {% endfor %}
            </tbody>
        </table>

            {% if query_ID_list.has_previous %}
            <a href="?page={{ query_ID_list.previous_page_number }}&q1ID={{ request.GET.q1ID }}">Page précédente</a>
            {% endif %}

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

            {% if query_ID_list.has_next %}
                <a href="?page={{ query_ID_list.next_page_number }}&q1ID={{ request.GET.q1ID }}">Page suivante</a>
            {% endif %}

你能告诉我我忘记了什么吗? 我得到了这个:

enter image description here

1 个答案:

答案 0 :(得分:1)

get_context_data中设置查询集是不常见的。

您应该覆盖get_queryset以返回Individu查询集。然后,如果您设置paginate_by,列表视图将负责您的分页。

class IdentityIndividuResearchingView(LoginRequiredMixin, ListView) :
    ...
    paginate_by = 3

    def get_queryset(self):
        if 'recherche' in self.request.GET:
            ...
        return Individu.objects.filter(**sort_params)

在模板中,您应该遍历{% for item in individu_list %},还可以使用page_objpaginator。您可能会发现this answer很有用。

请参阅MultipleObjectMixin文档,了解您可以在IdentityIndividuResearchingView课程中设置的分页选项。