• 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函数,刷新页面内容,实现翻页。

  • 相关阅读:
    CAP 理论笔记
    介绍 GOMEZ
    CDN资料下载(1) 20091223
    About网宿CDN
    [笔记] Darwin Streaming server 的 Task 类
    手把手教你写“隐藏图标托盘程序”
    WIN7下使用OpenSCManger和OpenService函数的注意
    oracle按月、日、时分组查询数据,为空的数据补零
    搜索引擎学习
    JSONP与JSON
  • 原文地址:https://www.cnblogs.com/lzhshn/p/13558560.html
Copyright © 2020-2023  润新知