【发布时间】:2016-03-20 22:00:06
【问题描述】:
我是 Django 新手,并尝试根据 URL 中的不同值设置分页。
在views.py中
class PageListView(ListView):
model = FbPage
paginate_by = 50
all_pages = False
def dispatch(self, *args, **kwargs):
self.request.session['all_pages'] = self.all_pages
return super(PageListView, self).dispatch(*args, **kwargs)
在网址中:
url(r'^$', PageListView.as_view(), name='show_page_list'),
url(r'^all/$', PageListView.as_view(all_pages=True), name='all_show_page_list'),
在模板中:
<div class="pagination">
<span class="page-links">
{% if page_obj.has_previous %}
<a href="{% url 'show_page_list' %}?page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="page-current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }} (total {{ page_obj.paginator.count }} items).
</span>
{% if page_obj.has_next %}
<a href="{% url 'show_page_list' %}?page={{ page_obj.next_page_number }}">next</a>
{% endif %}
</span>
</div>
问题是,即使我在home/all 页面中,它也会链接回home 页面分页,因为我传递的是show_page_list 而不是all_show_page_list
如何在模板中设置 if else 以便我可以有正确的分页或者我应该做一些不同的事情?
【问题讨论】:
-
您可能想阅读一下。它很好地分解了 ListView。 ccbv.co.uk/projects/Django/1.9/django.views.generic.list/…
-
显示“全部”可能会使您的页面加载持续变慢,因为您的数据库中包含更多对象。我建议使用按 5、10、25、50 或类似页面分页的“亚马逊”方法。
-
您可以查看我的分页器。它是原始的,但它有效并且具有良好的逻辑。 github.com/mrvol/uni_paginator
-
感谢 EmettSpeer 和 mrvol 的好意。我一定会调查这些。目前我仍处于学习阶段,所以我想自己实现它以了解更多信息。说我会注意的。这是个好主意。我可以在 Django 中使用内置分页器吗?
标签: python django pagination