【发布时间】:2011-10-02 23:26:02
【问题描述】:
我尝试使用一些排序选项在 Django 中实现分页结构,但是我不知道如何才能正确地做到这一点。
views.py
def search(request):
eList = Employer.objects.filter(eminence__lt=4).order_by('-eminence')
paginator = Paginator(eList, 3) # Show 3 contacts per page
page = request.GET.get('page')
try:
employerList = paginator.page(page)
except PageNotAnInteger:
employerList = paginator.page(1)
except EmptyPage:
employerList = paginator.page(paginator.num_pages)
return render_response(request, 'employer/search.html', {'employerList':employerList})
search.html
<div class="pagination">
<span class="step-links">
{% if employerList.has_previous %}
<a href="?page={{ employerList.previous_page_number }}">previous</a>
{% endif %}
<span class="current"> Page {{ employerList.number }} of {{ employerList.paginator.num_pages }}.</span>
{% if employerList.has_next %}
<a href="?page={{ employerList.next_page_number }}">next</a>
{% endif %}
</span>
</div>
这个例子效果很好,但是正如你所看到的,对于每个导航,我都需要获取所有 Employer 对象。之后Paginator 根据页码处理查询中的对象。但是,我认为分页应该在查询期间完成,并且只根据页码获取我想要的 X 个对象。当然,我可以以这种方式修改代码,但我不知道为什么人们使用Paginator,尽管有这样的开销。我可能会忽略一个细节...
我的第二个问题是如何应用排序我的列表?我是否应该修改我的url 并传递排序方法和页码,并根据它们通过排序方法获取查询并将其提供给Paginator?
这对我来说似乎合理且很好,但我只是想知道在 django 中是否有更好的方法。
谢谢
【问题讨论】:
标签: django sorting pagination