zoukankan      html  css  js  c++  java
  • 124-django的翻页/分页功能,使用Paginator

    假设,通过一个入口可以显示全部的文章。

    <header>
        <div>
            <h1>K-Note</h1>
            <ul>
                <li><a href="{% url 'notebook:start_page' %}">Start</a></li>
                <li><a href="{% url 'notebook:my_notes' 1 %}">My Notes</a></li>
                <li><a href="{% url 'notebook:add_note' %}">Add Note</a></li>
            </ul>
        </div>
    </header>
    

      

    由于默认显示通常都是第1页,所以在第二个链接里,显式地给出了一个值:1

    看一下对应的views函数:

    def my_notes(request, page_id):
        date_and_tag()
        all_notes = MyNote.objects.order_by('-pub_time')
        paginator_page = Paginator(all_notes, 10)
        page_obj = paginator_page.get_page(page_id)
        context = {'page_obj': page_obj, 'date_index': list(set(date_list)),
                   'tag_index': list(set(tag_list))}
        return render(request, 'my_notes.html', context)
    

      

    这个函数,接收url传来的page_id;

    第一步:获取所有的文章,并且按照时间倒序;

    第二步:实例化一个分页类:paginator_page,这个类是有两个参数:要进行分页操作的目标:all_notes,每一页有多少(10)个元素;

    第三步:paginator_page对象,使用get_page方法和参数(url传来的第几页),获得一个具体的页面,然后将这个内容(page_obj)放入上下文。

    最后看一下模板内容:

    {% block content %}
    <div class="left">
        <div>
        {% for note in page_obj %}
        <h3><a href="{% url 'notebook:one_note' note.pk %}">{{note.title}}</a></h3>
        <p>Create time:{{note.pub_time}} Update time:{{note.update_time}}</p>
        {% autoescape off %}
        <p>{{note.content|truncatechars:128}}</p>
        {% endautoescape %}
        <p>{{note.personal_tags.all}}</p>
        {% endfor %}
        </div>
    
        <div>
        <span>
        {% if page_obj.has_previous %}
            <a href="{% url 'notebook:my_notes' 1 %}">first</a>
            <a href="{% url 'notebook:my_notes' page_obj.previous_page_number %}">previous</a>
        {% endif %}
    
            <span>
                {{page_obj.number}} of {{page_obj.paginator.num_pages}}
            </span>
    
        {% if page_obj.has_next %}
            <a href="{% url 'notebook:my_notes' page_obj.next_page_number %}">next</a>
            <a href="{% url 'notebook:my_notes' page_obj.paginator.num_pages %}">last</a>
        {% endif %}
        </span>
        </div>
    
    </div>
    {% endblock content %}
    

      

    显示文章的部分,和之前start_page的一样,重点看下面的内容:

    最前页:1

    上一页:page_obj.previous_page_number

    当前页:page_obj.number

    下一页:page_obj.next_page_number

    最后页:page_obj.paginator.num_pages

    每点击一次,将内容传递到url里,然后执行views函数,刷新页面内容,实现翻页。

  • 相关阅读:
    Cousera课程Learning How to Learn学习报告
    C语言中当无符号数遇到符号数
    STC15 串口(工作方式1)使用小结
    取C语言头文件的文件名
    linux 的 shell 逻辑
    Win7 局域网内简单共享的设置
    写了一个批处理,可以实现文件备份,自动对比删除冗余文件。
    C语言 函数指针的应用
    自动控制原理 典型环节频率特性对比
    51单片机汇编的溢出标志位OV和进位标志位CY
  • 原文地址:https://www.cnblogs.com/lzhshn/p/13558560.html
Copyright © 2011-2022 走看看