django分页不能正常工作

时间:2017-10-02 09:05:33

标签: python html django paginator

我正在尝试基于分页功能的视图,它确实有效但...我想给你一个例子:

如果我总共有100个结果,并且我希望分页50,它将提供2页,但两个页面都有相同的100个结果。因为如果我要分页50,它会给我2页。

我使用了 link 中基于功能的视图。如果我实现其余的代码不起作用,我不想要分类视图原因。

我将发布我的部分代码。

views.py

def search_form_table(request, pk):
    table_name = Crawledtables.objects.get(id=pk)
    t = create_model(table_name.name)
    if request.method == 'GET':
        form = AllTablesForm(request.GET)
        if form.is_valid():
           cd = form.cleaned_data
           title = cd['title']
           url = cd['url']
           query = t.objects.filter(title__icontains=title,
                                 url__icontains=url)

           page = request.GET.get('page', 1)

           paginator = Paginator(query, 50)
           try:
              users = paginator.page(page)
           except PageNotAnInteger:
              users = paginator.page(1)
           except EmptyPage:
              users = paginator.page(paginator.num_pages)

           return render(request, 'search_table.html', {'tbl_name': table_name,
                                                            'users': users,
                                                            'form': form,
                                                            'details': query})

2 个答案:

答案 0 :(得分:1)

我会尝试复制您在文档中看到的漂亮示例(它是基于函数的视图)!
https://docs.djangoproject.com/en/1.11/topics/pagination/#using-paginator-in-a-view

如您所见,页面变量等于:

page = request.GET.get('page')  

而不是你正在做的

page = request.GET.get('page', 1)

传递给request.GET的get()方法只有一个字符串

答案 1 :(得分:0)

我建议在分页中使用get_page()

只需尝试一下:

def search_form_table(request, pk):
    table_name = Crawledtables.objects.get(id=pk)
    t = create_model(table_name.name)
    if request.method == 'GET':
        form = AllTablesForm(request.GET)
        if form.is_valid():
           cd = form.cleaned_data
           title = cd['title']
           url = cd['url']
           query = t.objects.filter(title__icontains=title,
                                 url__icontains=url)

           paginator = Paginator(query, 50)
           page = request.GET.get('page')
           users = paginator.get_page(page)

           return render(request, 'search_table.html', {'tbl_name': table_name,
                                                            'users': users,
                                                            'form': form,
                                                            'details': query})