Django_实现分页

时间:2024-01-05 09:31:08

需求:

  对于有很多数据,并不希望一次性全部展现在一个页面,需要一个分页的,定好每一页显示的内容

那,如何满足这个需求呢?

  1. 通过第三方模块  django-pure-pagination
    pip install django-pure-pagination
  2. setting配置,把这个模块添加到app中
    # 添加分页app
    INSTALLED_APPS = (
    ...
    'pure_pagination',
    ) # 分页app配置
    PAGINATION_SETTINGS = {
    # 总共显示多少个提示页面
    'PAGE_RANGE_DISPLAYED': 10,、
    # 最前面和最后面显示多少页面提示
    'MARGIN_PAGES_DISPLAYED': 2,
    # 当页面不存在时候,不返回404而是显示第一页
    'SHOW_FIRST_PAGE_WHEN_INVALID': True,
    }
  3. view中把多个结果的查询对象交个pure-pagination
    # 进行分页
    try:
    page = request.GET.get('page', 1)
    except PageNotAnInteger:
    page = 1
    p = Paginator(all_courses, 6, request=request)
    all_courses = p.page(page)
    # all_courses 是表查询的结果,把all_courses传递到模版
  4. template中通过object_list获取结果
                    <div id="inWindow">
    <div class="tab_cont " id="content">
    <div class="group_list"> {% for course in all_courses.object_list %}
    <div class="box">
    <a href="{% url 'course:detail' course.id %}">
    <img width="280" height="350" class="scrollLoading" src="{{ MEDIA_URL }}{{ course.image }}"/>
    </a>
    <div class="des">
    <a href="{% url 'course:detail' course.id %}">
    <h2>{{ course.name }}</h2>
    </a>
    <span class="fl">时长:<i class="key">{{ course.learn_times }}</i></span>
    <span class="fr">学习人数:{{ course.students }}  </span>
    </div>
    <div class="bottom">
    <a href="course-detail.html"><span class="fl">{{ course.courser_org.name }}</span></a>
    <span class="star fr notlogin
    " data-favid="15">
    {{ course.fav_nums }}
    </span>
    </div>
    </div> {% endfor %} </div>
    <div class="pageturn">
    <ul class="pagelist"> {# 显示上一页,没有不显示#}
    {% if all_courses.has_previous %}
    <li class="long"><a href="?{{ all_courses.previous_page_number.querystring }}">上一页</a></li>
    {% endif %} {# 中间显示页面#}
    {% for page in all_courses.pages %}
    {% if page %}
    {% ifequal page all_courses.number %}
    <li class="active"><a href="?{{ page.querystring }}">{{ page }}</a></li>
    {% else %}
    <li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>
    {% endifequal %}
    {% else %}
    <li><a href="" class="none">...</a></li>
    {% endif %}
    {% endfor %} {# 判断是否有下一页,有的话显示下一页,没有不显示#}
    {% if all_courses.has_next %}
    <li class="long"><a href="?{{ all_courses.next_page_number.querystring }}">下一页</a></li>
    {% endif %} </ul>
    </div>
    </div>
    </div>

    Githup地址 : https://github.com/jamespacileo/django-pure-pagination