7 添加页码_优化分页并添加日期归类,上下篇翻页功能

d2897f7a121f64910d9cb339285642e2.png 916f1525df1c702999e58ae6a5ed22d7.gif

哈喽,大家好呀,我是滑稽君。本期我们想要为博客添加底部翻页功能,文章内上下篇翻页功能,日期归类功能。这样我们就不需要在地址栏,传入参数来翻页啦。

9a82ce3daef425e57fbaeb7f4490a779.gif

视频讲解:

如下:

d1f767935d0e3c3eeec647af6ddb65fa.png

日期分类:

4e96f19acae2762ca51a43994adb536f.png

上下篇:

6e707f3bd7a8baa9d8027fea91da271f.png

当博客太多时,使其全部在一个网页上显示是不合理的,而且一次加载大量的博客,会使我们的处理速度变慢。因此我们把7篇博客分为一页,并在底部加上翻页的按钮(其实就是一些超链接)。我们希望页码太长时,进行折叠,页数太靠后或是靠前时,我们显示首尾页的按钮,方便我们跳转。在文章的内部我们还添加了上下篇的转跳。

日期分类需要我们先对博客有一个时间的排序。之前在models.py中,我们对bolgs进行了时间倒叙排列。

ordering = ['-created_time']

我们在views.py中,我们写了如何处理上下篇翻页的问题。详见注释。

def blog_detail(request, blog_pk):    context = {}    blog = get_object_or_404(Blog, pk=blog_pk)    #filter后的内容,返回比当前时间大于的创建时间的最后一个。这样我们可以得到上一篇博客    context['previous_blog'] = Blog.objects.filter(created_time__gt=blog.created_time).last()    context['next_blog'] = Blog.objects.filter(created_time__lt=blog.created_time).first()    context['blog'] = blog    return render_to_response('blog/blog_detail.html', context)

  那么按钮是如何添加的呢?在bolg_list.html中:

<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 %}                                <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>

这里是使用了bootstrap框架来完成。如上样式,大家可以查看中文文档,来挑选自己需要的内容。关键是如何实现我们刚才说的那种页码效果。

views.py:

page_range = list(range(max(currentr_page_num - 2, 1), currentr_page_num)) + \                 list(range(currentr_page_num, min(currentr_page_num + 2, paginator.num_pages) + 1))    # 获取页码的数量 paginator.num_pages    # 加上省略号    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)

我们使用max()和range()组合来完成。我们通过if来判断,是否需要添加省略号和首尾页的功能。若它们返回的页码和1相差超过3,那我们就添加一个省略号,并把首页添加到第一的位置。

仅展示部分源码,更细节的内容我们放在视频中为大家演示,全部源码放百度云啦~

https://pan.baidu.com/s/1tUJ3x9l_Dq1EvmTtMT4GOQ公众号内发送django获取提取码。https://space.bilibili.com/252028233
ee6a8f6305a2dd5a22f6749c9d68cba4.gif ❂ 滑稽研究所

 页码处理的部分大家可以代数算一下,我也会在视频中为大家简单的说一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值