django_pure_pagination
是第三方扩展包, 所以得通过命令来安装pip install django_pure_pagination
INSTALLED_APPS = [
...
'pure_pagination', # 分页器应用
]
三. 分页后可修改页码显示的个数和样式
# 配置分页器的样式
PAGINATION_SETTINGS = {
'PAGE_RANGE_DISPLAYED': 5, # 同一方向最多显示几个
'MARGIN_PAGES_DISPLAYED': 2, # 省略号前后有几个
'SHOW_FIRST_PAGE_WHEN_INVALID': True, # 在无效页码的时候显示到第1页
}
四. 视图中的分页
from pure_pagination import Paginator
def index(request):
"""主页"""
# 获取从前面点击的页面数字, 默认1
current_page = request.GET.get('page', 1)
# 获取所有的文章
post_list = Post.objects.all()
# 将所有数据分为10页
paginator = Paginator(post_list, 10)
# 生成一页中的文章
page_obj = paginator.page(current_page)
# 封装数据并返回页面
context['page_obj'] = page_obj
return render(request, 'blog/index.html', context)
五. 前端页面, 使用bootstrap美化分页
{# 分页器 #}
<nav style="text-align: center">
<ul class="pagination">
{% if page_obj.has_previous %} {# 如果有上一页才可以点击<< #}
<li class="previous">
{# 此处相对下面加了a标签, 可以点击 #}
<a href="?{{ page_obj.previous_page_number.querystring }}">
<span aria-hidden="true">«</span>
</a>
</li>
{% else %} {# 否则禁止点击上一页 #}
<li class="previous disabled">
<span aria-hidden="true">«</span>
</li>
{% endif %}
{% for page in page_obj.pages %}{# 遍历所有页数 #}
{% if page %}
{# 如果遍历到的数字和当前页相同, 则添加active, 高度 #}
<li {% ifequal page page_obj.number %} class="active"{% endifequal %}>
<a href="?{{ page.querystring }}">{{ page }}</a>
</li>
{% else %}
<li class="disabled">
<span>...</span>
</li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}{# 如果有下一页才可以点击>> #}
<li class="next">
{# 此处相对下面加了a标签, 可以点击 #}
<a href="?{{ page_obj.next_page_number.querystring }}">
<span aria-hidden="true">»</span>
</a>
</li>
{% else %}
<li class="next disabled">
<span aria-hidden="true">»</span>
</li>
{% endif %}
</ul>
</nav>
六. 最终效果
page.has_previous
# 是否有前一页
page.has_next
# 是否有下一页
page.previous_page_number.querystring
# 前一页的页码
page.next_page_number.querystring
# 下一页的页码
page.number
# 当前页
page.querystring
# 当前页页码
# 如果a=b
{% ifequal a b %}
{% endifequal %}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)