Django 开发博客 实现分页功能

15人阅读 评论(0) 收藏 举报
分类:

在  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>



查看评论

Django 开发进阶

针对每一个URL请求,都会有一个试图函数去处理,这就涉及视图,作为后端开发,会大量和数据库打交道,这就需要ORM更加灵活方便地操作数据库,也就是model的学习。 课程主要包括试图函数,路由分发以及ORM对表纪录的增删改查以及外键的应用。
  • 2017年03月03日 18:47

django实战(二)一个较完整的博客系统

昨天实现了一个简单的博客显示系统,今天实现一个较为完整的博客系统,当然还未进行完整的界面优化,但是发布还是可以实现的。 一、数据库的构建(M) 首先,我们分析一个博客系统的功能: ...
  • a18852867035
  • a18852867035
  • 2017-03-26 15:31:22
  • 5374

Django完整的开发一个博客系统

今天花了一些时间搭了一个博客系统,虽然并没有相关于界面的美化,但是发布是没问题的。开发环境操作系统:windows 7 64位 Django: 1.96 Python:2.7.11 IDE: P...
  • Marksinoberg
  • Marksinoberg
  • 2016-06-05 19:37:31
  • 28814

Django搭建个人博客

最近学着用Django搭建了个个人博客,目前域名正在备案中,现在把我这最近半个月的摸爬滚打经历记录下。Django入门 Python核心编程 追梦人物的 Django博客教程 菜鸟Django教程 自...
  • ddydavie
  • ddydavie
  • 2017-08-15 19:12:09
  • 2238

Django开发个人博客(一)

眼馋个人博客很久了,虽然前端并不是以后要做的方向,但是多会一点东西还能装装逼嘛qaq...看了很多个人博客之后,大概发现其中的难点和重点在以下方面:1、表单的提交,处理,可能会有文件的上传。2、ses...
  • miyudo
  • miyudo
  • 2018-04-08 20:40:08
  • 32

Django开发自己的博客系统

好久之前就想做一下自己的博客系统了,但是在网上查了查好像是需要会一些Node.js的相关知识,而且还要安装辣么多的库什么的,就不想碰了。但是我遇到了Django这么一款神器,没想到我的博客系统就这么建...
  • Marksinoberg
  • Marksinoberg
  • 2016-06-05 12:48:12
  • 11458

使用 django-blog-zinnia 搭建个人博客

目前网上搭建个人博客的方案很多,虽然使用诸如 Wordpress ( PHP )、Hexo ( Node.js ) 等可以方便快速地搭建一款功能齐全的高性能个人博客,但是本文将尝试一种更为小众化的方案...
  • u014792107
  • u014792107
  • 2016-09-07 12:12:23
  • 2607

Django 学习小组:博客开发实战第五周教程 —— 实现评论功能

通过前四周的时间我们开发了一个简单的个人 Blog,前几期教程地址:第一周:Django 学习小组:博客开发实战第一周教程 —— 编写博客的 Model 和首页面第二周:Django 学习小组:博客开...
  • u014792107
  • u014792107
  • 2016-06-25 10:04:15
  • 1374

Django 快速搭建个人博客(终结版)

本次开发博客从11月1号到今天晚上6号,历时一个周,除开周日一天没有进行代码的开发,到现在博客基本开发完成,虽然是自己第二次通过django开发博客了,上次是按照南大一位大神进行开发的,虽然只是简简单...
  • xudailong_blog
  • xudailong_blog
  • 2017-11-06 22:50:11
  • 557

django实战(一)简单博客显示

一直想好好学习一下Python,正好Django是一个很好的网站开发框架,可以用来web程序。接下来,以一个博客为例。一、创建基本框架:(django1.0+python3.6+pycharm) (...
  • a18852867035
  • a18852867035
  • 2017-03-25 16:04:41
  • 1287
    个人资料
    持之以恒
    等级:
    访问量: 1991
    积分: 494
    排名: 10万+
    最新评论