django【原生分页】
1 1.urls.py 2 url(r'^page2/',views.page2), 3 2.views.py 4 from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage 5 def page2(request): 6 customer_list=models.UserType.objects.all() 7 paginator=Paginator(customer_list,10) 8 page = request.GET.get('p') 9 try: 10 customer_objs=paginator.page(page) 11 except PageNotAnInteger: 12 customer_objs=paginator.page(1) 13 except EmptyPage: 14 customer_objs=paginator.page(paginator.num_pages) 15 return render(request,'page2.html',{'customer_list':customer_objs}) 16 3.page2.html 17 {% load custom_tags %} 18 <style> 19 .active{ 20 background: gold; 21 } 22 </style> 23 <table> 24 <thead> 25 <tr> 26 <th>ID</th> 27 <th>name</th> 28 </tr> 29 </thead> 30 <tbody> 31 {% for item in customer_list %} 32 <tr> 33 <td>{{ item.id }}</td> 34 <td>{{ item.caption }}</td> 35 </tr> 36 {% endfor %} 37 </tbody> 38 </table> 39 <br> 40 <div class="pagination"> 41 <nav> 42 {% if customer_list.has_previous %} 43 <span class="#"><a href="?p={{ customer_list.previous_page_number }}" aria-label="Previous"><span aria-hidden="true">«</span></a></span> 44 {% endif %} 45 {% for page_num in customer_list.paginator.page_range %} 46 {% guess_page customer_list.number page_num %} 47 {% endfor %} 48 {% if customer_list.has_next %} 49 <span class="#"><a href="?p={{ customer_list.next_page_number }}" aria-label="Next"><span aria-hidden="true">»</span></a></span> 50 {% endif %} 51 </nav> 52 </div> 53 4.自定义模板函数 54 app01/templatetags/custom_tags.py 55 from django import template 56 from django.utils.html import format_html 57 register=template.Library() 58 @register.filter 59 def _lower(val): 60 print('-----val',val) 61 return val.lower() 62 @register.simple_tag 63 def guess_page(current_page,loop_num): 64 offset=abs(current_page-loop_num) 65 if offset < 3: 66 if current_page == loop_num: 67 page_ele='<span class="active"><a href="?p=%s">%s</a></span>'%(loop_num,loop_num) 68 else: 69 page_ele='<span class=""><a href="?p=%s">%s</a></span>'%(loop_num,loop_num) 70 return format_html(page_ele) 71 else: 72 return ""