我使用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 %}
答案 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
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 !!
开始分页工作就足够了。