一、创建过滤器
1. 在应用(case)下创建templatestag包,创建pagetag.py。具体层级结构如下:
具体代码如下:
from django import template
#实例化过滤器
register = template.Library()
from django.utils.html import format_html
@register.simple_tag
def circle_page(curr_page, loop_page):
offset = abs(curr_page - loop_page)
if offset < 5:
if curr_page == loop_page:
page_ele = '<li class="page-item active"><a class="page-link" href="?page=%s">%s</a></li>'%(loop_page, loop_page)
else:
page_ele = '<li class="page-item"><a class="page-link" href="?page=%s">%s</a></li>' % (
loop_page, loop_page)
return format_html(page_ele)
else:
return ''
2.在项目setting.py中对过滤器进行配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"login.apps.LoginConfig",
"upload_case.apps.UploadCaseConfig",
#配置过滤器所在应用
"case.apps.CaseConfig",
]
二、view层功能实现
from django.shortcuts import render
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from upload_case.models import Case
# Create your views here.
def list(request):
#在数据库中查询所有用例
case_list = Case.objects.filter(status=1)
case_count = len(case_list)
#创建每页10条的分页器
paginator = Paginator(case_list,10)
#获取要跳转的页码
page = request.GET.get("page")
try:
contacts = paginator.page(page)
except PageNotAnInteger:
#如果page不是整数,跳转到第一页
contacts = paginator.page(1)
except EmptyPage:
#如果page不在范围内,跳转到最后一页
contacts = paginator.page(paginator.num_pages)
return render(request,"case/list.html", context={"case_list":contacts})
三、templates功能实现
{#加载过滤器#}
{% load pagetag%}
<nav aria-label="Page navigation example" class="float-right">
<ul class="pagination">
{# 判断是否存在上一页#}
{% if case_list.has_previous %}
<li class="page-item">
<a class="page-link" href="?page={{ case_list.previous_page_number }}" aria-label="Previous">
<span aria-hidden="true">«</span>
<span class="sr-only">Previous</span>
</a>
{% endif %}
</li>
{#循环输入所有页码#}
{% for pg in case_list.paginator.page_range %}
{# 调用过滤器,将当前页码和所有页码传给过滤器#}
{% circle_page case_list.number pg %}
{% endfor %}
{# 判断是否存在下一页#}
{% if case_list.has_next %}
<li class="page-item">
<a class="page-link" href="?page={{ case_list.next_page_number }}" aria-label="Next">
<span aria-hidden="true">»</span>
<span class="sr-only">Next</span>
</a>
</li>
{% endif %}
</ul>
</nav>