Django Pagination返回第2页的整个数据库

时间:2018-02-17 05:07:20

标签: python html django pagination django-pagination

尝试在Django中进行分页。它在第1页看起来很好但是当我转到第2页时,我可以看到我的整个数据库都显示出来了。

这是我的代码:

class AdvancedSearch(ListView):
        template_name= 'saferdb/AdvancedQuery.html'

        def get(self, request):
            c = request.GET.getlist('opeclass')
            q = Question.objects.all()

            #Ugly q filtering methods

            paginator = Paginator(q, 25)
            page = request.GET.get('page')
            contacts = paginator.get_page(page)
            return render(request, 'saferdb/list.html', {'text' : count , 'contacts': contacts})

URLS.py

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^query/$', views.QueryView.as_view(), name='query'),
    url(r'^advanced/$', views.AdvancedSearch.as_view(), name='advanced'),
]

模板代码:

<form method="get">

<!--- bunch of selection to filer output by --->
<div class="pagination">
    <span class="step-links">
        {% if contacts.has_previous %}
            <a href="?page=1">&laquo; first</a>
            <a href="?page={{ contacts.previous_page_number }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ contacts.number }} of {{ contacts.paginator.num_pages }}.
        </span>

        {% if contacts.has_next %}
            <a href="?page={{ contacts.next_page_number }}">next</a>
            <a href="?page={{ contacts.paginator.num_pages }}">last &raquo;</a>
        {% endif %}
    </span>
</div>

1 个答案:

答案 0 :(得分:1)

如果使用def get方法,则不应使用ListView,而是使用TemplateView或View。 ListView有paginate_by attr,例如

zipWithIndex()

page_kwarg ==&#39; page&#39;默认情况下它会检查你的url并获取page_kwarg值的数据,那么你可以用ListView做什么呢

class AdvancedSearch(ListView):
    template_name= 'saferdb/AdvancedQuery.html'
    paginate_by=25
    page_kwarg = 'page'

实际上它

P.S。对于我的观点,它有点奇怪,您通过问题模型查询集进行分页,但在响应查询集中称为联系人。可能在您的代码中遗漏了一些重要内容?