1. 程式人生 > 程式設計 >python Django框架實現web端分頁呈現資料

python Django框架實現web端分頁呈現資料

這裡介紹使用python-Django框架來實現web端分頁呈現資料,主要說明對應的views,urls,templates三個檔案的程式設計邏輯的實現。

首先介紹Django中的paginator類。paginator是Django中提供的可以實現管理資料分頁的類。

from django.core import paginator 

下面是本文用到的paginator中的屬性和方法。

Paginator物件

1. 構造:Paginator(列表,int):返回分頁的整體物件。
2. page_range:返回頁碼列表 [1,2,3,4…]
3. page(num):返回num頁的資料內容

Page物件

1. 構造:Paginator物件的page()方法返回Page物件。
2. number:返回當前頁的序號。
3. paginator:當前page物件相關的Paginator物件。page.paginator相當於Paginator物件。

A. 構造url。

#---urls.py------
from django.conf.urls import url
import views
urlpatterns = [
 # 這個url構造在根目錄下
 # 定義為'info/數字'是為了傳一個頁面序號為引數給檢視函式
 # 檢視函式接收到這個數字為引數後,就可以呼叫對應頁的資料呈現
 # 例如我們輸入www.xxx.com/info/3,檢視函式就會接收到(request,3)兩個引數
 url(r'^info/(\d*)$',views.info),]
#---------

B. 編寫檢視函式的邏輯。

#---views.py---
from django.shortcuts import render
# 這裡的lcoation是定義的模型類,包含有若干條地名資料
from models import location
from django.core import paginator

# 檢視函式
# 同樣,index是url傳進來的頁面序號
def info(request,index):
 # 獲取所有的的資料,list是一個列表,包含有所有資料對應的例項物件
 list = location.objects.all()
 # 使用Paginator方法返回一個分頁的物件
 # 這個物件包括所有資料,分頁的情況
 pag = paginator.Paginator(list,3)
 # 使用此判斷語句是為了在使用者跳轉www.xxx.com/info/時也能訪問第一頁
 if index=='':
  index=1
 # 返回指定(index)頁的資料,用於呈現在指定頁上
 page = pag.page(index)
 # 構造上下文,以便html檔案中能呼叫對應頁的資料
 context = {
  'page':page,}
 return render(request,'booktest/info.html',context)
#---------

C. 模板檔案。

#---info.html------
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<ul>
 # 檢視函式傳進來的上下文page是指定頁的資料
 {% for each in page %}
 # 遍歷顯示每條資料
 <li>{{ each.location_name }}</li>
 {% endfor %}
</ul>
<hr>
 # 這裡是重點
 # 同樣還是需要呼叫檢視函式傳進來的page頁的頁碼
 # page.paginator得到page的paginator物件
 # page.pageinator.page_range page_range可以返回頁面列表[1,4...]
 # 遍歷頁面列表
 {% for index in page.paginator.page_range %}
  # page.number是檢視函式現在呈現頁的頁碼
  # 這個頁碼不需要做超連結
  {% if index == page.number %}
  <span>{{ index }}</span>
  {% else %}
  # 生成每頁超連結
  # 點選每一個數字對應的連結就是'/info/點選的頁數'
  # 這樣在url解析的時候,又可以把這一頁的編號傳給檢視函式
  # 檢視函式根據這個頁碼呈現對應的內容
   <a href="/info/{{index}}" rel="external nofollow" >{{ index }}</a>
  {% endif %}
 {% endfor %}

</body>
</html>
#---------

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。