在Django中,我使用如下分页器:
从django.core.paginator导入分页器、EmptyPage、PageNotAnInteger
def myView(request):
...
paginator = Paginator(Annonce.objects.filter(name="huhu"), 10)
paginator._count = s.count()
try:
annonces = paginator.page(page)
except PageNotAnInteger:
annonces = paginator.page(1)
except EmptyPage:
annonces = paginator.page(paginator.num_pages)在s.search()函数中,我对postgres数据库进行了查询。
事实证明,即使我每页显示10个项目,查询也不受限制。
我尝试使用Annonce.objects.filter(name="huhu")[:10]限制查询,并自己指定计数。但是如果我这样做了,分页器就不能工作了。
有没有办法对此进行优化?
发布于 2012-11-04 10:13:24
使用这个示例https://docs.djangoproject.com/en/dev/topics/pagination/#using-paginator-in-a-view作为编写适当使用django Paginator的视图函数的指南。
请注意,在示例代码snippert中-
def listing(request):
contact_list = Contacts.objects.all()
paginator = Paginator(contact_list, 25) # Show 25 contacts per page
page = request.GET.get('page') # <--- This is the key to your solution.contact_list是一个指定的查询集,它实际上还没有被计算过。对Paginator instance的paginator = Paginator(contact_list, 25)赋值是惰性的,除非迫不得已,否则不会真正执行。
page = request.GET.get('page')从你的url中获取额外的GET变量?page=2 (例如)。当我们尝试检索应该出现在列表页面(第2页)上的25个对象时,url实际上看起来类似于http://localhost:8000/my/listing?page=2。
这是执行对数据库的实际查询的地方:
try:
contacts = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
contacts = paginator.page(1)contacts = paginator.page(page)执行对数据库的查询,根据提供给它的页码和我们希望每页"25“个对象的条件,仅检索有限的对象集。
https://stackoverflow.com/questions/13214834
复制相似问题