【问题标题】:How to use pagination in class-based generic views?如何在基于类的通用视图中使用分页?
【发布时间】:2011-07-30 17:21:30
【问题描述】:

我尝试将分页实现到基于类的通用视图,但以我的方式,它不起作用。

网址

url(r'^cat/(?P<category>[\w+\s]*)/page(?P<page>[0-9]+)/$',
    CategorizedPostsView.as_view(), {'paginate_by': 3}),

查看

class CategorizedPostsView(ListView):
    template_name = 'categorizedposts.djhtml'
    context_object_name = 'post_list'

    def get_queryset(self):
        cat = unquote(self.kwargs['category'])
        category = get_object_or_404(ParentCategory, category=cat)
        return category.postpages_set.all()

模板

<div class="pagination">
    <span class="step-links">
        {% if post_list.has_previous %}
            <a href="?page={{ post_list.previous_page_number }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ post_list.number }} of {{ post_list.paginator.num_pages }}.
        </span>

        {% if post_list.has_next %}
            <a href="?page={{ post_list.next_page_number }}">next</a>
        {% endif %}
    </span>
</div>

当我尝试获取 http://127.0.0.1:8000/cat/category_name/?page=1 甚至 http://127.0.0.1:8000/cat/category_name/ 时,我得到了 404 异常。

如何在基于类的通用视图中正确使用分页?

【问题讨论】:

    标签: python django django-generic-views django-pagination


    【解决方案1】:

    嘿,ListView 已经有一个 kwarg paginate_by,所以只需将它传递进去。 试试这样的:

    url(r'^cat/(?P<category>[\w+\s]*)/page(?P<page>[0-9]+)/$',
        CategorizedPostsView.as_view(paginate_by=3)),
    

    对于您的模板,您可以尝试以下操作:

    {% if is_paginated %}
        <div class="pagination">
            <span class="step-links">
                {% if page_obj.has_previous %}
                    <a href="?page={{ page_obj.previous_page_number }}">previous</a>
                {% endif %}
    
                <span class="current">
                    Page {{ page_obj.number }} of {{ paginator.num_pages }}.
                </span>
    
                {% if page_obj.has_next %}
                    <a href="?page={{ page_obj.next_page_number }}">next</a>
                {% endif %}
            </span>
        </div>
    {% endif %}
    

    【讨论】:

    • 谢谢。并且 URL 会更简单一些 - url(r'^cat/(?P&lt;category&gt;[\w+\s]*)/$, CategorizedPostsView.as_view(paginate_by=3)), 对于获取方法,不需要显式声明 url。
    猜你喜欢
    • 2015-06-15
    • 2011-08-19
    • 2010-10-14
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2013-01-10
    相关资源
    最近更新 更多