Django 开发博客 实现分页功能

在  views的添加

#   显示博客列表
def blog_list(request):


    pages_list_all = Blog.objects.all()
    # 每10页进行分页
    #   paginator 分页器的实例化
    paginator = Paginator(pages_list_all, 2)
    page_num = request.GET.get('page', 1) # 获取GET请求的内容,默认为1  获取url的页面参数(GET请求)
    page_of_blogs = paginator.get_page(page_num) # 将获取的第几页的文章列表值给赋值,get方法会自动处理异常
    current_page_num = page_of_blogs.number      #  获取当前页码

    # 页面范围  显示 分页时的 结果, 就是如果有多个分页,不完全显示,就显示4个页面
    #   获取当前页码和 当前页码的前后两页
    page_range = list(range( max(current_page_num-2, 1), current_page_num )) + \
                 list(range(current_page_num,  min(current_page_num+2, paginator.num_pages) + 1))

    #   加上省略页码
    if page_range[0] - 1 >= 2:
       page_range.insert(0, '...')
    if paginator.num_pages - page_range[-1] >= 2:
        page_range.append('...')
    
    # 加上首页和尾页
    if page_range[0] != 1:
        page_range.insert(0, 1)
    if page_range[-1] != paginator.num_pages:
        page_range.append(paginator.num_pages)


    context = {}
    # 获取当所有的文章列表 ,两行都是
    # context['blogs'] = Blog.objects.all()
    context['blogs'] = page_of_blogs.object_list

    # 获取当前页的文章列表 ,两行都是
    context['page_of_blogs'] = page_of_blogs

    context['page_range'] = page_range

    # 获取文章分类列表
    context['blog_types'] =  BlogType.objects.all()
    return render_to_response('blog/blog_list.html', context)


前端页面

{# 页面内容 #}
{% block content %}
<!-- 这里的html是一个 框框, 珊格 -->
    <div class="container">
        <div class="row">
            <!-- 这是调珊格大小 -->
            <div class="col-sm- 8 col-md-8  col-lg-10">
                <div class="panel panel-default">
                    <div class="panel-heading"> 博客列表
                        <!-- 这里有个块,作为博客分类 查看的页面的调用 -->
                        {% block blog_list_title %}
                        {% endblock %}
                    </div>
                        <div class="panel-body">
                            {% for blog in blogs %}
                                <div class="blog">
                                    <!-- url 的参数,blog_detail是urls中的别名, 后面的是点pk,与urls的path  -->
                                    <!-- 将views中的pk参数,传给urls中的前面的参数 -->
                                    <a href="{% url 'blog_detail' blog.pk %}">
                                        <h3>{{ blog.title  }}</h3>
                                    </a>
                                    <ul>
                                        <!-- 下面是分类和时间的图标 -->
                                        <p class="blgo_info">
                                            <span class="glyphicon glyphicon-tags" aria-hidden="true">
                                            </span>
                                        <a href="{% url 'blogs_with_type' blog.blog_type.pk%}">{{blog.blog_type.type_name}}
                                        </a>
                                            <span class="glyphicon glyphicon-time" aria-hidden="true">
                                            </span>
                                            {{blog.created_time|date:"Y-m-d"}}                               
                                        </p>

                                    </ul>
                                    <p>{{ blog.content | truncatechars:100 }}</p>                                    
                                </div>
                            {% empty %}
                                <div class="blog">
                                    <h3>-- 还没有写博客, 敬请期待!--</h3>
                                </div>
                            {% endfor %}                          
                        </div>
                </div>

                <!-- 显示 所有的页数 -->
                <div class="paginator">
                  <ul class="pagination">
                    <!-- 上一页 -->
                    <li>
                        {% if page_of_blogs.has_previous %}
                            <!-- 链接到上一页, 函数是返回上一页的页码 -->
                            <a href="?page={{page_of_blogs.previous_page_number}}" aria-label="Previous">
                                <span aria-hidden="true">«</span>
                            </a>
                        {% else %}
                                <!-- 不能点 -->
                                <span aria-hidden="true">«</span>
                        {% endif %}

                        <!-- 全部页码 -->
                        <!-- 如果是当前页,当前页就不能点,而且...不能点 -->
                    </li>
                        {%  for page_num in page_range %}
                            {% if page_num == page_of_blogs.number %}
                                <!-- 这里的链接 是对应发的前面views中的GET请求 -->
                                <li class="active"><span>{{page_num}}</span></li>
                            {% else %} 
                                {% if page_num == '...' %}
                                    <li><span>{{page_num}}</span></li>
                                {% else %}
                                    <li><a href="?page={{ page_num }}">{{page_num}}</a></li>
                                {% endif %}                 
                            {% endif%}
                        {% endfor %}
                    <li>
                        <!-- 下一页  -->
                        {% if page_of_blogs.has_next %}
                           <a href="?page={{page_of_blogs.next_page_number}}" aria-label="Next">
                            <span aria-hidden="true">»</span>
                          </a>                       
                        {% else %}
                            <span aria-hidden="true">»</span>
                        {% endif %}

                    </li>
                  </ul>
                    <p></p>
                    <!-- 添加过滤器,统计有多少篇博客。 -->
                    <!-- (一共有{{ blogs | length}}篇博客) -->
                    <p>
                        当前为{{page_of_blogs.number}}页
                        共有{{page_of_blogs.paginator.num_pages}}页
                        共有{{ page_of_blogs.paginator.count}}篇博客
                    </p>
                </div>
            </div>



阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页