Django分頁器
阿新 • • 發佈:2017-11-29
digi edi disable res short 啟動 實現 需要 creat
Django分頁器
當首頁展示內容過多時,需要使用分頁來講數據傳遞給用戶,這時就可以用到Django提供的分頁器;
批量向數據庫中插入數據
1.創建表:models.py
from django.db import models
class Book(models.Model):
name=models.CharField(max_length=32)
price=models.DecimalField(max_digits=7,decimal_places=2)
2.創建路由url:urls.py
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^add/', views.add),
]
3.批量創建數據:views.py
from django.shortcuts import render,HttpResponse,redirect
from app01 import models
def index(request):
pass
def add(request):
Booklist=[]
for i in range(100):
# 生成book對象
book_obj = models.Book(name="book"+str(i), price=30+i*i)
Booklist.append(book_obj)
# bulk_create 將實例化的 列表 插入到數據庫中
models.Book.objects.bulk_create(Booklist)
return HttpResponse("OK")
啟動後通過url:http://127.0.0.1:8000/add/ 添加數據
分頁器Paginator模塊的使用
1.Paginator模塊功能介紹:
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def index(request):
# 取出所有的書籍 100 條
book_list=models.Book.objects.all()
paginator=Paginator(book_list,10) # 表示每頁展示的條數
print(paginator.count) # 統計一共有多少條數據
print(paginator.num_pages) # 表示一共多少頁
print(paginator.page_range) # range(1, 11) 頁數的範圍值
page2=paginator.page(2) # 表示獲取第二頁的10條數據 book10--book19
# 根據當前頁 判斷是否有 上一頁和下一頁
print(page2.has_next()) # 是否有下一頁
print(page2.next_page_number()) # 下一頁的頁碼
print(page2.has_previous()) # 是否有上一頁
print(page2.previous_page_number()) # 上一頁的頁碼
輸出:
100
10
range(1, 11)
True
3
True
1
分頁器實現
1.views.py設置:
# 待改進,如果接收得字符為 字符串 會出錯
from django.shortcuts import render,HttpResponse,redirect
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from app01 import models
from django.urls import reverse
# Create your views here.
def index(request):
Book_list = models.Book.objects.all()
paginator = Paginator(Book_list, 10)
page = request.GET.get('page', 1)
currentPage = int(page)
try:
Book_list = paginator.page(page)
except PageNotAnInteger:
Book_list = paginator.page(1)
except EmptyPage:
Book_list = paginator.page(paginator.num_pages)
return render(request, "index.html", {"Book_list": Book_list, "paginator": paginator, "currentPage": currentPage})
2.index.html設置:
<ul class="pagination" id="pager">
{% if Book_list.has_previous %}
<li class="previous"><a href="/index/?page=1">首頁</a></li>
<li class="previous"><a href="/index/?page={{ Book_list.previous_page_number }}">上一頁</a></li>
{% else %}
<li class="previous active"><a href="/index/?page=1">首頁</a></li>
<li class="previous disabled"><a>上一頁</a></li>
{% endif %}
{% for num in paginator.page_range %}
{% if num == currentPage %}
<li class="item active"><a href="/index/?page={{ num }}">{{ num }}</a></li>
{% else %}
<li class="item"><a href="/index/?page={{ num }}">{{ num }}</a></li>
{% endif %}
{% endfor %}
{% if Book_list.has_next %}
<li class="next"><a href="/index/?page={{ Book_list.next_page_number }}">下一頁</a></li>
<li class="previous"><a href="/index/?page={{ paginator.num_pages }}">尾頁</a></li>
{% else %}
<li class="next disabled"><a>下一頁</a></li>
<li class="previous active"><a href="/index/?page={{ paginator.num_pages }}">尾頁</a></li>
{% endif %}
</ul>
Django分頁器