【问题标题】:django paginator, number of pages are not returndjango paginator,页数不返回
【发布时间】: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


【解决方案1】:

直接来自文档,更改了变量名称:https://docs.djangoproject.com/en/dev/topics/pagination/#using-paginator-in-a-view

观点:

def listing(request):
    story_list = Story.objects.all()
    p = Paginator(story_list, 2) # Show 2 contacts per page
    page = request.GET.get('page')
    try:
        stories = p.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        stories = p.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        stories = 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', {"stories": stories})

模板:

<ul id="story-list">
    {% for story in stories %}
        <li><a href="{{story.get_absolute_url}}">{{story.title}}</a></li><br>
    {% endfor %}
</ul>

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    相关资源
    最近更新 更多