我试图根据我的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 %}
你能告诉我我忘记了什么吗? 我得到了这个:
答案 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_obj
和paginator
。您可能会发现this answer很有用。
请参阅MultipleObjectMixin
文档,了解您可以在IdentityIndividuResearchingView
课程中设置的分页选项。