1. 程式人生 > 實用技巧 >django表格分頁與bootstrap的使用

django表格分頁與bootstrap的使用

一、django專案中引用bootstrap

1、首先下載bootsrtap程式碼,將下載後的檔案放在project下新建立的static目錄下。下載jquery放在static/bootstrap/js/目錄下。

2、在templates中,新建base.html。。

3、在templates中建立book.html,並繼承base.html模版。

{% extends 'base.html' %}

目錄結構為:

4、修改全域性setting檔案,新增靜態檔案路徑。

STATIC_URL = '/static/' #若存放靜態檔案的static目錄在app目錄下,則STATIC_URL生效,無需定義下面的

STATICFILES_DIRS = [            #若存放靜態檔案的static目錄在project目錄下,則STATICFILES_DIRS生效

os.path.join(BASE_DIR, "static"),

]

5、設定url

在url中設定轉發規則

from django.contrib import admin
from django.urls import path,re_path
from mysite import views
urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r
'^book', views.bookhandle, name="book") ]

6、定義檢視函式 views.py

from django.shortcuts import render
from mysite import models
from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage
# Create your views here.
def bookhandle(request):
    bookdic = models.bookHandle.objects.all()

   return
render(request, 'book.html',{'book_list':bookdic })

7、修改bash.html中引用boostrap檔案,定義鉤子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <link rel="stylesheet" href="../static/bootstrap/css/bootstrap.min.css">
    <script src="../static/bootstrap/js/jquery-3.2.0.min.js"></script>
    <script src="../static/bootstrap/js/bootstrap.min.js"></script>
    <script src="../static/bootstrap/js/holder.min.js"></script>
    <title>base</title>
</head>
<body>
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
    {% block booklist %}
        page content
    {% endblock %}
</div>
</body>
</html>

二、book.html

1、新建book.html頁面,用來展示book列表。該頁面繼承父模版base.html,並實現鉤子。

{% extends 'base.html' %}
{% block booklist %}
<h3>書籍列表</h3>
    <table class="table table-striped">
        <thead>
            <tr>
                <th>書名</th>
                <th>簡介</th>
                <th>出版社</th>
                <th>價格</th>
                <th>狀態</th>

            </tr>
        </thead>
        <tbody>
            {% for foo in book_list %}
            <tr>
                <td>{{ foo.bookname }}</td>
                <td>{{ foo.sumary }}</td>
                <td>{{ foo.publisher }}</td>
                <td>{{ foo.price }}</td>
                <td>{{ foo.status }}</td>
            </tr>
            {% endfor %}
        </tbody>

    </table>

{% endblock %}

2、在static/bootstrap/css目錄下建立用於顯示不同狀態底色的樣式檔案status_color.css,每個類標籤的名字即資料庫中客戶狀態的欄位

.soldout{
    background-color: orange;
}
.available{
    background-color: greenyellow;
}

3、在base.html中新增對status_color.css樣式的引用


<link rel="stylesheet" href="../static/bootstrap/css/status_color.css">

book.html顯示效果為:

三、分頁顯示

1、修改views中bookhandle函式

from django.shortcuts import render
from mysite import models
from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage
# Create your views here.
def bookhandle(request):
    bookdic = models.bookHandle.objects.all()
    paginator=Paginator(bookdic,2)    #每頁顯示2條
    page=request.GET.get('page')        #前段請求的頁,比如點選'下一頁',該頁以變數'page'表示
    try:
      book_obj=paginator.page(page) #獲取前端請求的頁數
    except PageNotAnInteger:
        book_obj=paginator.page(1)   #如果前端輸入的不是數字,就返回第一頁
    except EmptyPage:
        book_obj=paginator.page(paginator.num_pages)   #如果前端請求的頁碼超出範圍,則顯示最後一頁.獲取總頁數,返回最後一頁.比如共10頁,則返回第10頁.
    return render(request, 'book.html',{'book_list':book_obj})

2、修改前端顯示頁面

在表格後面新增

<div class="pagination">
    <span class="step-links">
        {% if book_list.has_previous %}                                     <!--如果有上一頁-->
            <a href="?page={{ book_list.previous_page_number }}">上一頁</a>  <!--點選時超連結到上一頁-->
        {% endif %}

        <span class="current">
             Page{{ book_list.number }} of {{ book_list.paginator.num_pages }}  <!--customers_list.number為當前頁碼,customers_list.paginator.num_pages為總頁碼數-->
        </span>

        {% if book_list.has_next %}    <!--如果有下一頁-->
            <a href="?page={{ book_list.next_page_number }}">下一頁</a>    <!--點選時超連結到下一頁-->
        {% endif %}
    </span>
</div>

效果如下圖: