django中django-pure-pagination分页器

一. 安装模块

  • django_pure_pagination 是第三方扩展包, 所以得通过命令来安装
  • 打开cmd输入 pip install django_pure_pagination

二. 在settings.py中增加添加分页器

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">&laquo;</span>
                </a>
            </li>
        {% else %}  {# 否则禁止点击上一页 #}
            <li class="previous disabled">
                <span aria-hidden="true">&laquo;</span>
            </li>
        {% endif %}

        {% for page in page_obj.pages %}{# 遍历所有页数 #}
            {% if page %}
                {# 如果遍历到的数字和当前页相同, 则添加active, 高度 #}
                {% ifequal page page_obj.number %}
                    <li class="active"><a href="javascript:;">{{ page }}</a></li>
                {% else %}
                    <li><a href="?{{ page.querystring }}" class="page">{{ page }}</a></li>
                {% endifequal %}
            {% 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">&raquo;</span>
                </a>
            </li>
        {% else %}
            <li class="next disabled">
                <span aria-hidden="true">&raquo;</span>
            </li>
        {% endif %}
    </ul>
</nav>
  • 在前端页面展示每一页文章
{% for obj in page_obj.object_list %}
{% endfor %}

六. 最终效果

django中django-pure-pagination分页器_第1张图片
django中django-pure-pagination分页器_第2张图片

七. page的常用属性

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

你可能感兴趣的:(Django,django,python,bootstrap)