我正在尝试基于分页功能的视图,它确实有效但...我想给你一个例子:
如果我总共有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})
答案 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})