使用ListView和django-filter的Django分页无法正常工作

时间:2018-07-07 12:35:22

标签: python django listview pagination

我在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 %}

0 个答案:

没有答案