【发布时间】:2014-02-18 10:44:59
【问题描述】:
我想使用 django.core.paginator,但我的 render_to_response 函数有问题。 views.py 中名为 pages 的变量应该返回页数等,但事实并非如此。 我看到的所有故事,但分页不起作用。 views.py 文件如下所示:
from django.shortcuts import render_to_response, get_object_or_404
from django.db.models import Q
from cms.models import Story, Category
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def listing(request):
story_list = Story.objects.all()
p = Paginator(story_list, 2) # Show 2 contacts per page
page = request.GET.get('page')
try:
pages = p.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
pages = p.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
pages = p.page(p.num_pages)
return render_to_response('/usr/local/lib/python2.7/dist-packages/django/bin/project_003/cms/templates/cms/story_list.html', {"pages": pages})
而 story_list.html 像这样:
{% extends "/usr/local/lib/python2.7/dist-packages/django/bin/project_003/cms/templates/cms/base.html" %}
{% block content %}
{% if heading %}
<h1>{{ heading }}</h1>
{% endif %}
<ul id="story-list">
{% for story in story_list %}
<li><a href="{{story.get_absolute_url}}">{{story.title}}</a></li><br>
{{pages.p.num_pages}}
{% endfor %}
<div class="pagination">
<span class="step-links">
{% if pages.has_previous %}
<a href="?page={{ pages.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ pages.number }} of {{ pages.paginator.num_pages }}.
</span>
{% if pages.has_next %}
<a href="?page={{ pages.next_page_number }}">next</a>
{% endif %}
</span>
</div>
</ul>
{% endblock %}
我哪里出错了?
【问题讨论】:
-
这不是您的实际代码,因为您没有将
story_list传递给模板。但错误是您正在迭代story_list而不是pages。 -
另请注意,如果您从根目录传递完整文件路径作为视图中的模板位置,则您的 TEMPLATE_DIRS 设置存在非常错误。
-
另外,您将
pages作为Page对象返回到模板。这意味着它不是一个可以从中获取页数的Paginator对象。 -
你是对的——那么我怎样才能得到页数呢?遍历
story in pages.object_list也不工作
标签: python django pagination