理解Django分页:需要解释一段文档代码

时间:2015-12-28 16:32:17

标签: python django pagination

我正在使用Django内置的 Pagination ,并想出如何通过Pagination上的Django文档功能性地使用它。尽管我能够使它与我的应用程序一起工作,但是在文档示例中显示了一部分示例逻辑,我认为在继续之前我很清楚这一点很重要。他们没有那么好解释,我没有在StackOverflow(或互联网)上找到任何其他问题来解决它。

为Django Pagination提供的视图文件示例...
此示例假定已经导入了“联系人”类。

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render

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

    page = request.GET.get('page')
    try:
        contacts = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        contacts = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        contacts = paginator.page(paginator.num_pages)

    return render(request, 'list.html', {'contacts': contacts})

我想解释的这部分代码(在视图文件中找到)...

page = request.GET.get('page')

('page')有什么意义?我无法理解。

以下是模板文件(有助于理解......

{% for contact in contacts %}
    {# Each "contact" is a Contact model object. #}
    {{ contact.full_name|upper }}<br />
    ...
{% endfor %}

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

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

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

1 个答案:

答案 0 :(得分:2)

在链接中,您使用page作为存储页码的变量,例如

<a href="?page={{ contacts.previous_page_number }}">

在渲染模板中,这将类似于

<a href="?page=5">

当用户点击此链接时,page=5将包含在请求的GET参数中。然后在视图中使用以下内容获取页码:

page = request.GET.get('page')

所选变量page没有什么特别之处。重要的是request.GET.get()中使用的字符串与模板中使用的字符串相同。