python---django中內建分頁類使用

來源:互聯網
上載者:User

標籤:索引   nbsp   gpo   super   lis   style   content   inf   exce   

請先看在學習tornado時,寫的自訂分頁類:思路一致;

python---自訂分頁類

1.基礎使用:

後台資料擷取:

from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage#錯誤判斷
List_info = []for i in range(1000): List_info.append("news%d"%i)def get_page(req): current_page = req.GET.get(‘p‘) paginator = Paginator(List_info,10) #傳入總資料和每頁顯示的資料
  #含有屬性:
  #per_page:每頁顯示條數上面的10
  #count資料總數
  #num_pages:總頁數
  #page_range:總頁數索引範圍
  #page:page對象 try: posts = paginator.page(current_page)
     #page對象含有方法:
     #has_next:判斷是否有下一頁
     #has_previous:判斷是否有上一頁
     #next_page_number:下一頁頁碼
     #previous_page_number:上一頁頁碼
     #number:當前頁
     #paginator:paginator對象 except PageNotAnInteger: posts = paginator.page(1) except EmptyPage: posts = paginator.page(paginator.num_pages) #num_pages數總頁數,最後一頁 return render(req,‘get_page.html‘,{‘posts‘:posts})

前端代碼:

    <div class="content">        {% for item in posts %}            <p>{{ item }}</p>        {% endfor %}    </div>    <div>        <span>            {% if posts.has_previous %}  #模板中調用函數不要()                <a href="/page.html?p={{ posts.previous_page_number }}">prev</a>            {% endif %}            <span class="current">                Page {{ posts.number }} of {{ posts.paginator.num_pages }}            </span>            {% if posts.has_next %}                <a href="/page.html?p={{ posts.next_page_number }}">next</a>            {% endif %}        </span>    </div>

2.擴充內建分頁:

類修改:

from django.core.paginator import Paginator,PageNotAnInteger,EmptyPageclass CustomPagimator(Paginator):    def __init__(self,current_page,max_page_num,*args,**kwargs):        self.current_page = int(current_page)  #當前頁        self.max_page_num = max_page_num    #可以顯示多少頁        super(CustomPagimator,self).__init__(*args,**kwargs)    def page_num_range(self):        # self.num_pages 總頁數        part_num = int(self.max_page_num/2)        if self.current_page+part_num>= self.num_pages:            return range(self.num_pages-self.max_page_num,self.num_pages+1)        elif self.current_page <= part_num:            return range(1,self.max_page_num+1)        else:            return range(self.current_page - part_num, self.current_page + part_num + 1)

類調用:

List_info = []for i in range(1000):    List_info.append("news%d"%i)def get_page(req):    current_page = req.GET.get(‘p‘)    paginator = CustomPagimator(current_page=current_page, max_page_num=5,object_list=List_info,per_page=10)  #傳入總資料和每頁顯示的資料    try:        posts = paginator.page(current_page)    except PageNotAnInteger:        posts = paginator.page(1)    except EmptyPage:        posts = paginator.page(paginator.num_pages) #num_pages數總頁數,最後一頁    page_html = paginator.page_num_range()    return render(req,‘get_page.html‘,{‘posts‘:posts,"page_html":page_html})

前端使用:

    <div>        <span>            {% if posts.has_previous %}                <a href="/page.html?p={{ posts.previous_page_number }}">prev</a>            {% endif %}            <span class="page">                {% for i in page_html %}                    <a href="/page.html?p={{ i }}">{{ i }}</a>                {% endfor %}            </span>            <span class="current">                Page {{ posts.number }} of {{ posts.paginator.num_pages }}            </span>            {% if posts.has_next %}                <a href="/page.html?p={{ posts.next_page_number }}">next</a>            {% endif %}        </span>    </div>

 

python---django中內建分頁類使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.