Django Bootstrap分页无法正常工作

时间:2015-04-14 13:01:42

标签: python django twitter-bootstrap pagination

我使用django 1.8创建一个应用程序,并希望实现分页页面。我使用这个附加组件:https://github.com/jmcclell/django-bootstrap-pagination

我收到错误:

AttributeError at /blog/
'NoneType' object has no attribute 'paginator'

在settings.py中我有:

 INSTALLED_APPS = (
        'bootstrap_pagination',
    )

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.request",
)

这是我的模板(帖子列表):

{% extends "base.html" %}
{% load bootstrap_pagination %}

{% block content %}
    <ul>
        {% for p in post %}
            <hr>
            <li>
                <h3><a href="{% url 'blog:detail' p.id %}">{{ p.title }}</a></h3>
                <p>{{ p.text | truncatewords:50 }}</p>
            </li>
        {% endfor %}
    </ul>

<div class="pagination-row text-right">
    {% bootstrap_paginate page_obj range=4 %}
</div>

{% endblock %}

{% block content_bottom %}{% endblock content_bottom %}

1 个答案:

答案 0 :(得分:1)

您必须在视图中准备page_obj(不是基于类)并将其与上下文一起返回。

请参阅https://docs.djangoproject.com/en/1.8/topics/pagination/#using-paginator-in-a-view

所以,你认为必须是那样的

def listing(request):
    contact_list = Contacts.objects.all()
    paginator = Paginator(contact_list, 25) # Show 25 contacts per page

    page = request.GET.get('page')
    try:
        page_obj = paginator.page(page)
    except PageNotAnInteger:
        page_obj  = paginator.page(1)
    except EmptyPage:
        page_obj  = paginator.page(paginator.num_pages)

    return render_to_response('list.html', {"page_obj": page_obj })

和模板

{% extends "base.html" %}
{% load bootstrap_pagination %}

{% block content %}
    <ul>
        {% for p in page_obj %}
            <hr>
            <li>
                <h3><a href="{% url 'blog:detail' p.id %}">{{ p.title }}</a></h3>
                <p>{{ p.text | truncatewords:50 }}</p>
            </li>
        {% endfor %}
    </ul>

<div class="pagination-row text-right">
    {% bootstrap_paginate page_obj range=4 %}
</div>

{% endblock %}

{% block content_bottom %}{% endblock content_bottom %}

<强>更新

另外,请参阅django Generic Class视图的MultipleObjectMixin

https://docs.djangoproject.com/en/dev/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin.get_context_data

page_obj:django.core.paginator.Page的一个实例。如果页面未分页,则此上下文变量将为None。

ListView是MultipleObjectMixin的继承: https://docs.djangoproject.com/es/1.9/ref/class-based-views/generic-display/#listview

所以,当我们使用泛型列表类视图并设置paginate_by变量足以激活分页时:

import models
from django.views.generic import ListView

class CarListView(ListView):
    model = models.Car     
    template_name = 'app/car_list.html'  # optional (the default is app_name/modelNameInLowerCase_list.html; )
    context_object_name = "car_list" 
    paginate_by = 10  #and that's it !!

开始分页工作就足够了。