Django_实现分页

需求:

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

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

  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

posted @ 2017-09-01 10:38  梦_鱼  阅读(172)  评论(0)    收藏  举报