1. 程式人生 > >python的Web框架,html分頁

python的Web框架,html分頁

led 超出 text 數據量 digi imp context model true

使用簡單的算法得出頁碼數,然後在html中獲取即可。僅供參考。

views的寫法

 1 def crm_stu(request):
 2     section = 教師後臺管理頁
 3     search = request.GET.get(search, ‘‘).strip()
 4     if search:
 5         if search.isdigit():
 6             sts = Students.objects.filter(Q(qq=search) | Q(phone=search), is_deleted=False).order_by(
-e_time) 7 else: 8 sts = Students.objects.filter(name__contains=search, is_deleted=False).order_by(-e_time) 9 10 else: 11 sts = Students.objects.filter(is_deleted=False).order_by(-e_time) 12 13 14 把需要的數據計算出來,然後傳給tags標簽 15 # 當前頁 16 page = request.GET.get(
page, 1) 17 page = int(page) 18 # 每頁顯示的數據條數 19 per_page = request.GET.get(per_page, 10) 20 per_page = int(per_page) 21 # 總學生數 22 total_count = sts.count() 23 # 總頁數 24 total_page = math.ceil(total_count/per_page) 25 26 # 獲取數據的範圍。 27 sts = sts[(page-1)*per_page:page*per_page]
28 return render(request, teacher/crm-stu.html, context={ 29 section: section, 30 sts: sts, 31 search: search, 32 page: page, 33 per_page: per_page, 34 total_page:total_page, 35 })

標簽tags的方法定義

 1 # 註冊並把配置的網頁放進來,並把context傳給網頁
 2 @register.inclusion_tag(inclu_tags/pagination.html,takes_context=True)
 3 
 4 def pagination(context):
 5     
 6     # 除當前頁外,每兩邊的頁碼數
 7     num = 2
 8     page = context[page]
 9     per_page = context[per_page]
10     total_page = context[total_page]
11 
12     page_list = []
13     # 生成左邊的頁碼以及當前頁碼
14     if page - num <= 0:  #如果當前頁面減去num的數量小於等於0,則左邊頁碼是展示不全的,不夠num的數量
15         for i in range(page):
16             page_list.append(i+1)
17     else:
18         for i in range(page-num,page+1):
19             page_list.append(i)
20             
21     # 生成右邊的頁碼
22     if page + num >= total_page: #如果當前的頁碼加上num的數量大於總頁數,則右邊的頁碼超出了總頁數,就需要頁碼只到總頁數為止
23         for i in range(page+1, total_page+1):
24             page_list.append(i)
25     else:
26         for i in range(page+1, page+num+1):
27             page_list.append(i)
28 
29     return {
30         page_list: page_list,
31         context: context,
32     }

num代表頁面兩邊的頁面數量。每邊的頁碼只有2個,則num就是2。

技術分享圖片

html中的用法:css樣式請忽略

 1 <nav aria-label="Page navigation">
 2   <ul class="pagination" style="margin: 0">
 3   
 4     <!--如果當前頁碼為1,則顯示css樣式,不能點擊-->
 5     <li {% if context.page == 1 %}class="disabled" {% endif %}>
 6         如果當前頁碼為大於1,則加上href標簽,可以有點擊上一頁的標簽,且上一頁的標簽需要渲染出來。是當前網址+參數(搜索內容,當前頁碼-1,每頁展示的數據條數)
 7       <a {% if context.page > 1  %}href="{{ request.path }}?search={{ context.search }}&page={{ context.page|add:‘-1‘ }}
 8       &per_page={{ context.per_page }}"{% endif %} aria-label="Next">
 9         <span aria-hidden="true">&laquo;</span>
10       </a>
11       
12       
13     </li>
14   {% for page in page_list %}
15     <li {% if context.page == page %}class="active" {% endif %}><a href="{{ request.path }}?search={{ context.search }}
16     &page={{ page }}&per_page={{ context.per_page }}">{{ page }}</a></li>
17   {% endfor %}
18     <li {% if context.page == context.total_page %}class="disabled" {% endif %}>
19       <a {% if context.page < context.total_page %}href="{{ request.path }}?search={{ context.search }}&page=
20 {{ context.page|add:‘1‘ }}&per_page={{ context.per_page }}"{% endif %} aria-label="Next">
21         <span aria-hidden="true">&raquo;</span>
22       </a>
23     </li>
24   <li><a href="{{ request.path }}?page=1&per_page={{ context.per_page }}">回到首頁</a></li>
25   </ul>
26 </nav>

Django內置分頁功能

# 接受兩個參數
from django.core.paginator import Paginator
from teacher.models import Students
>>>p = Paginator(Students.objects.all().ordet_by(-c_time), 3)

# 總數據量
>>> p.count
15

# 總頁數
>>> p.nun_pages
5

# 頁面範圍
>>> p.page_range
range(1,6)

# 返回第一頁的數據
>>> page1 = p.page(1)

# 獲取的是一個可叠代的set字段
>>> page1.object_list
 <QuerySet [<Students: 哈哈哈-23>, <Students: 哈哈-15>, <Students: aaaasdds-16>]>

# 是否有上一頁
>>> page1.has_previous()
False

# 是否有下一頁
>>> page.has_next()
True

# 下一頁的頁碼
>>> page1.next_page_number()
2

# 獲取當前頁的數據
>>> s = p.get_page(1)

# 當前頁碼
>>>page1.nunber
1

python的Web框架,html分頁