Django代码分享: 可以重用的Bootstrap 4分页模板

  • Post author:
  • Post category:其他

我们之前已经介绍了如何使用Django 2.0的自带Paginator类可以实现分页功能但有人跟我抱怨该案例生成的分页效果太丑(如下图所示), 希望我能帮助美化一下。今天我就来分享下一个可以重用的Bootstrap 4分页模板吧,你可以直接用到你的Django 分页项目里,迅速美化你的页面。

改进后的分页效果如下所示, 是不是好多了?

Django Bootstrap 4分页模板代码

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>

<h3>Django Boostrap 4分页模板</h3>
{# 注释: page_obj不要改。for里的article可以改成自己对象 #}
{% if page_obj %}
    <ul> {% for article in page_obj %}
   <li><a href="{%%20url%20'blog:article_detail'%20article.id%20%}"> {{ article.title }}</a> {{ article.pub_date | date:"Y-m-j" }}</li>
    {% endfor %}
   </ul>

{# 注释: 下面代码一点也不要动 #}
   {% if is_paginated %}
     <ul class="pagination">
    {% if page_obj.has_previous %}
      <li class="page-item"><a class="page-link" href="?page={{%20page_obj.previous_page_number%20}}">Previous</a></li>
    {% else %}
      <li class="page-item disabled"><span class="page-link">Previous</span></li>
    {% endif %}

    {% for i in paginator.page_range %}
        {% if page_obj.number == i %}
      <li class="page-item active"><span class="page-link"> {{ i }} <span class="sr-only">(current)</span></span></li>
       {% else %}
        <li class="page-item"><a class="page-link" href="?page={{%20i%20}}">{{ i }}</a></li>
       {% endif %}
    {% endfor %}

         {% if page_obj.has_next %}
      <li class="page-item"><a class="page-link" href="?page={{%20page_obj.next_page_number%20}}">Next</a></li>
    {% else %}
      <li class="page-item disabled"><span class="page-link">Next</span></li>
    {% endif %}
    </ul>
    {% endif %}

{% else %}
{# 注释: 这里可以换成自己的句子 #}
    <p>No article yet</p>
{% endif %}

 

视图views.py

之所以说这个模板是可以重用的,是因为其同时支持基于函数方法的视图和Django自带的基于类的视图(CBV)。因为新闻博客为例,下面两种视图都是可以的。你可以稍微改下视图文件views.py即可实现Bootstrap 4分页效果。

from django.views.generic import ListView
from .models import Article
from django.shortcuts import render
from django.core.paginator import Paginator


# Create your views here.
class ArticleListView(ListView):
    queryset = Article.objects.filter(status='p').order_by('-pub_date')
    paginate_by = 3


def article_list(request):
    articles = Article.objects.filter(status='p').order_by('-pub_date')
    paginator = Paginator(articles, 3)
    page = request.GET.get('page')
    page_obj = paginator.get_page(page)

    return render(request, 'blog/article_list.html',
                  {'page_obj': page_obj, 'paginator': paginator, 'is_paginated': True})
 
 
 

版权声明:本文为weixin_42134789原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。