我们之前已经介绍了
如何使用Django 2.0的自带Paginator类可以实现分页功能
。但有人跟我抱怨该案例生成的分页效果太丑(如下图所示), 希望我能帮助美化一下。今天我就来分享下一个可以重用的Bootstrap 4分页模板吧,你可以直接用到你的Django 分页项目里,迅速美化你的页面。
改进后的分页效果如下所示, 是不是好多了?
Django Bootstrap 4分页模板代码
Django Boostrap 4分页模板
{#注释: page_obj不要改。for里的article可以改成自己对象#}
{% if page_obj %}
{% for article in page_obj %}
{{ article.title }}{{ article.pub_date | date:"Y-m-j" }}
{% endfor %}
{#注释:下面代码一点也不要动#}
{% if is_paginated %}
{% if page_obj.has_previous %}
Previous
{% else %}
class="page-link">Previous
{% endif %}
{% for i in paginator.page_range %}
{% if page_obj.number == i %}
class="page-link">{{ i }}class="sr-only">(current)
{% else %}
{{ i }}
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
Next
{% else %}
class="page-link">Next
{% endif %}
{% endif %}
{% else %}
{#注释:这里可以换成自己的句子#}
No article yet
{% endif %}
视图views.py
之所以说这个模板是可以重用的,是因为其同时支持基于函数方法的视图和Django自带的基于类的视图(CBV)。因为新闻博客为例,下面两种视图都是可以的。你可以稍微改下视图文件views.py即可实现Bootstrap 4分页效果。
fromdjango.views.genericimportListView
from.modelsimportArticle
fromdjango.shortcutsimportrender
fromdjango.core.paginatorimportPaginator
# Create your views here.
classArticleListView(ListView):
queryset = Article.objects.filter(status='p').order_by('-pub_date')
paginate_by =3
defarticle_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)
returnrender(request,'blog/article_list.html',
{'page_obj': page_obj,'paginator': paginator,'is_paginated':True})
领取专属 10元无门槛券
私享最新 技术干货