日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2 django系列之django分页与templatetags

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2 django系列之django分页与templatetags 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

preface

當頁面出現的條目多的時候,我們就需要使用分頁功能了。Django作為一個知名的web框架,自然也提供了分頁功能,下面說說它。

Python-shell 練練手

在python下入手

先創建一個操作對象
>>> hehe = ['ljf','richer','wang',1,2,3] >>> hehe ['ljf', 'richer', 'wang', 1, 2, 3]
表示每頁兩份,表示把hehe這個列表每一頁2份數據
>>> p = Paginator(hehe,2) #表示每頁兩份,表示把hehe這個列表每一頁2份數據 >>> p <django.core.paginator.Paginator object at 0x0000000000B75630>
統計多少個值
>>> p.count #統計多少個值 6
統計多少頁
>>> p.num_pages #統計多少頁 3
查看頁數
>>> p.page_range     #查看頁數 range(1, 4)
取第一頁的內容
>>> p1=p.page(1) #取第一頁的內容 >>> p1 >>> p1.object_list ['ljf', 'richer']
獲取第二頁
>>> p2=p.page(2) >>> p2 <Page 2 of 3>
顯示當前頁內容
>>> p2.object_list ['wang', 1]
判斷是否有一下頁
>>> p2.has_next() #判斷是否有一下頁 True
判斷是否有上一頁
>>> p1.has_previous() # 判斷是否有上一頁 False
判斷是否還有其他頁
>>> p1.has_other_pages() # 判斷是否還有其他頁 True

在html中使用分頁功能

在html中,我們需要使用django 的templatetags功能來實現動態顯示當前頁的前后3頁,避免頁數過大導致頁碼太長。這個功能可以參考官網的例子(https://docs.djangoproject.com/en/1.10/howto/custom-template-tags/)。

我們首先查看項目目錄,自己寫的tag在app下面新建一個目錄templatetags,必須是這個名字:

[root@salt devops]# tree BatchM BatchM ├── Batch │?? ├── templatetags │?? │?? ├── custom_tag.py # 這個就是自己定義的tag. │?? │?? ├── __init__.py
custom_tag.py的內容
from django import templatefrom django.utils.html import format_html register = template.Library() # 注冊到tempate庫里面@register.filter # filter只能對一個參數傳入有效,調用到時候這樣用 {{ xx.line | ljf_power}} def ljf_lower(val): #這個僅僅是測試練習寫的代碼,可以忽略。return val.lower()@register.simple_tag() # simple_tag能夠對傳入多個參數有效 def guess_page(current_page,loop_num):''':param current_page: 當前頁:param loop_num: 頁數范圍:return:'''offset = abs(current_page - loop_num)if offset < 3: # 表示取當前頁的前后三頁if current_page == loop_num :page_element = ''' <li class="active"><a href="?page=%s">%s<span class="sr-only">(current)</span></a></li>'''%(loop_num,loop_num) # 拼html代碼else:page_element = '''<li><a href="?page=%s">%s<span class="sr-only">(current)</span></a></li>'''%(loop_num,loop_num)return format_html(page_element)else:return '' # 必須寫一個return 空字符串,這樣就不會在前端頁面顯示None
我們再看看調用這個tags的html代碼
提前引入bootstrap,jquery。 {% load custom_tag %} # 需要引用剛才創建的tag ''''省略其他代碼N行<nav><ul class="pagination">{% if contacts.has_previous %} <!-- 判斷是否有首頁 --><li class="disabled"><a href="#">&laquo;</a></li>{% endif %}{% for page_num in contacts.paginator.page_range %}{% guess_page contacts.number page_num %} <!-- guess_page 直接寫剛才在tag里面定義的方法, contacts.numer表示時當前頁,page_num表示for循環到元素-->{% endfor %}{% if contacts.has_next %} <!-- 判斷是否有下一頁 --><li class="disabled"><a href="#">&raquo;</a></li>{% endif %}</ul></nav>
再看views里面的代碼:
def apply_update_search(request):''':param request::return:'''if request.method == 'GET':records = models.WorkOrderOfUpdate.objects.filter(username=request.user.get_username()).order_by('OrderId').reverse() #數據庫搜索page = request.GET.get('page') # 與前端頁面的a標簽鏈接保持一致try:contacts = pageinator.page(page)except PageNotAnInteger: # 如果輸入到不是一個數字,發送第一頁contacts = pageinator.page(1)except EmptyPage: # 如果獲取到超過來頁數范圍,那么就返回最后一頁。contacts = pageinator.page(pageinator.num_pages)return render(request,'apply_update.html',{'btitle':'搜索操作記錄','contacts':contacts})
url配置
url(r"apply_update.html/search",views.apply_update_search,name='post_order_id')

以上功能完成后,就可以實現這樣的功能:

轉載于:https://www.cnblogs.com/liaojiafa/p/6231385.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的2 django系列之django分页与templatetags的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。