我在ListView中使用django-filter,这导致了分页问题。在我的列表视图中,加载页面时分页显示正确并显示
底部1-7页的页面链接。但是,当我转到任何这些页面时,它将显示所有模型实例。例如,我单击第2页,在URL后面附加?page=2
,并将paginate-by
设置为20时,我希望对象的ID为21-40。
我知道问题是由django-filter引起的,因为当我从“ get_context_data”中删除它时,分页可以正常工作。我只是在django-filter对象中使用'self.queryset'作为参数,所以我不知道为什么会这样。用于分页的html包含在基本模板中,我在ListView子类的模板中对其进行了扩展。
当我在上下文数据中包含django过滤器和/或为解决该问题而应尝试的操作时,关于分页为何无法正常工作的任何建议将不胜感激。
基本ListView和一个子类:
class BaseCompoundListView(ListView):
queryset = Compound.objects.all()
template_name = 'compounds/compound_list.html'
paginate_by = 20
def get_context_data(self, **kwargs):
context = super(BaseCompoundListView, self).get_context_data(**kwargs)
context['odor_types'] = OdorType.objects.values('term')
compound_filter = CompoundFilter(self.request.GET, queryset=self.queryset)
context['compound_filter'] = compound_filter
return context
class CompoundListView(BaseCompoundListView):
def get_context_data(self, **kwargs):
context = super(CompoundListView, self).get_context_data(**kwargs)
context['page_header'] = 'All compounds'
return context
基本模板:
{% block content %}{% endblock %}
{% block pagination %}
{% if is_paginated %}
<div class="pagination">
<span class="page-links">
{% if page_obj.has_previous %}
<a href="{{ request.path }}?page={{ page_obj.previous_page_number }}">previous</a>
% endif %}
<span class="page-current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
</span>
{% if page_obj.has_next %}
<a href="{{ request.path }}?page={{ page_obj.next_page_number }}">next</a>
{% endif %}
</span>
</div>
{% endif %}
{% endblock %}