美文网首页Django - 开发站点
Django NBA Web开发 - Step 7 文章分页

Django NBA Web开发 - Step 7 文章分页

作者: AllenBigBear | 来源:发表于2019-03-16 18:44 被阅读1次

发布文章功能做好了,统一显示在每个球队页面的上面
不过如果时间长了以后,关于球队的文章会越来越多,所以势必需要用到分页功能
Django内置了分页的功能,是Paginator类
我们来看一下官方文档中关于Paginator的说明


官方文档说明

class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
第一个参数是需要给到一个可切片对象,而第二个参数per_page则就是字面意思,每页显示多少个这个对象中的元素。
另外一个非常关键的参数就是orphans,他的作用是,当你最后一页显示的元素非常少的时候,他可以帮你把这几个元素归并到前一页去做成“最后一页”,比如这个数值是3,那么当最后一页的元素小于等于三的时候,他就会自动加到前一页的最末尾。

orphans

完了我们来修改一下team这个app的views文件

def team_page(request,team_id):

    team_name = Team.objects.get(team_id=team_id)
    team_articles = Article.objects.filter(team_id=team_id)
    paginator = Paginator(team_articles,4)  #通过过滤出来的文章,生成分页对象
    page = request.GET.get('page')  #具体显示哪一页的内容,根据url里面的page参数来进行定位
    contacts = paginator.get_page(page) #根据定位出来的页码,生成当页的内容

    if request.method == "GET":
        article_form = ArticleForm()
    elif request.method == 'POST':
        form = ArticleForm(request.POST)
        f = form.save(commit=False)
        f.user = request.user
        f.team_id = team_id
        f.save()
        #print (f)
        return redirect('team:team_page',team_id=team_id)

    return render(request,'team_page.html',locals())

随后,我们也需要修改一下前端渲染的页面,需要注意的是,显示的文章内容,和按钮的显示,是分开区域设定的。

文章标题的显示,需要从contacts,也就是分页对象中进行迭代获取,而不是之前的article对象。另外在按钮的显示上,也需要进行逻辑判断,是否有前一页和后一页,至于是否有前一页和后一页,完全是根据你输入给Paginator的参数来自动计算的。

    <ul>
    {% for i in contacts %}
        <li><a href="{% url 'team:article_detail' i.article_id %}">{{i.article_title}}</a></li>
    {% endfor %}
    </ul>

    {% if contacts.has_previous %}
        <a href="?page=1">&laquo;first</a>
        <a href="?page={{contacts.previous_page_number}}">previous</a>
    {% endif %}
    <span>Page {{contacts.number}}of{{contacts.paginator.num_pages}}</span>
    {% if contacts.has_next %}
            <a href="?page={{ contacts.next_page_number }}">next</a>
            <a href="?page={{ contacts.paginator.num_pages }}">last &raquo;</a>
        {% endif %}

让我们来看下效果图


效果图

参考文档:https://docs.djangoproject.com/en/2.1/topics/pagination/

相关文章

  • Django NBA Web开发 - Step 7 文章分页

    发布文章功能做好了,统一显示在每个球队页面的上面不过如果时间长了以后,关于球队的文章会越来越多,所以势必需要用到分...

  • Django NBA Web开发 - Step 6 发布文章

    有了用户,有了关注系统,接下来,在自己喜欢的球队页面下面,发布文章,也是一个日常使用频率很高的功能。 不想很简单地...

  • Django NBA Web开发 - Step 16 Djang

    内容基本上开发差不多了,最后一步进行服务器的部署.后续添加:本来想一篇把这个内容写完的,结果踩了无数个坑,之前部署...

  • Django NBA Web开发 - Step 17 Djang

    上一篇里面反常规地记录了只用django的开发服务器来接受外部的访问。这篇开始要开始正常的部署服务器了,区别就是要...

  • Django NBA Web开发 - Step 10 头像上传

    作为现在社交网站最基本的功能,头像上传必不可少。这里就简单写一下我的实现 1:模型的建立 上传文件的字段,叫做Fi...

  • Django NBA Web开发 - Step 9 添加Ajax

    断断续续了点时间,下班乱七八糟事情太多,今天总算继续做点赞的功能,并把原来创建在测试区域的功能移植到项目中去了。前...

  • Django NBA Web开发 - Step 13 球员名单

    前面球队页面的内容基本做完了,接下来准备做球员信息的页面。中间一段时间在看爬虫,想通过做一个简单爬虫去爬取所有球员...

  • Django NBA Web开发 - Step 1 首页建立

    自己之前用Flask撸过网站,现在重新学习Django框架,网上博客教程不少,不想完全模仿博客教程。 所以自己构思...

  • Django NBA Web开发 - Step 3 用户系统

    继续网站的开发,这篇会说到用户系统的建立,包括注册账号,登录,注销登录,重置密码,修改密码等。不过这篇文章内容不会...

  • Django NBA Web开发 - Step 2 球队页面

    这一篇主要记录球队页面的建立及用户系统的建立 接上一篇,主页显示的是各个球队的名字,后续想要做到的是点击每个球队名...

网友评论

    本文标题:Django NBA Web开发 - Step 7 文章分页

    本文链接:https://www.haomeiwen.com/subject/eegsmqtx.html