crm

在django的models.py 中,咱們定義了一些choices的元組,相似一些字典值,通常都是下拉框或者單多選框,例如 0對應男 1對應女等。html

class Area(models.Model):
    Area_Level = (
         (0, u‘全國‘),
         (1, u‘省、直轄市‘),
         (2, u‘市、直轄市區‘),
         (3, u‘區、縣等‘),
    )

    areaname = models.CharField(max_length=30,unique=True, verbose_name=‘區域名稱‘)
    code = models.CharField(max_length=20,blank=True, default="", verbose_name=‘區域代碼‘)
    parentid  = models.IntegerField(verbose_name=‘父級id‘, null=True)
    level = models.IntegerField(choices=Area_Level,verbose_name=‘層級‘, null=True)

若是咱們想要在HTML中顯示choice中的字段值,採用{{ obj.level }} 獲得的只是數字0,1,2,3 ,若是咱們想要的到’全國’、’省、直轄市’、等字段,須要採用get_FOO_display方法:前端

{{ obj.get_level_display}}
bj.get_字段名稱_display 。python

分頁進行切片

crm

未完待續web

編輯增長

view的寫法

def addcedtiorustomer(request, n=None):
    old_obj = models.Customer.objects.filter(pk=n).first()
    label = '編輯頁面' if n else '添加頁面'
    #三元運算符 根據 n的值進行
    if request.method == 'GET':

        book_form_obj = myform.customermodelform(instance=old_obj)
        print(book_form_obj)
        return render(request, 'customer/addcustomer.html', {"book_form_obj": book_form_obj, 'label': label})
    else:
        book_form_obj = myform.customermodelform(request.POST, instance=old_obj)

        if book_form_obj.is_valid():
            book_form_obj.save()
            return redirect('customer')
        else:
            return render(request, 'customer/addcustomer.html', {'book_form_obj': book_form_obj, 'label': label})

html組件寫法

{% extends 'starter.html' %}


{% block title %}
    <h1>{{ label }}</h1>

{#    <h1>編輯客戶頁面</h1>#}
{% endblock %}


{% block context %}


    {% include 'customer/add_edit_mode.html' %}


{% endblock %}
    
add_edit_mode.html

小技巧django

 

搜索模塊介紹

QueryDict轉換成可變

使用request.get._mutable=ture 把quersetDIct是不可變app

request.GET出來的是queryset類型的數據 
想要轉換成python類型的對象須要進行轉換
(self, query_string=None, mutable=False, encoding=None):
request.GET._mutable須要把這個屬性改成False
1.強制轉換 request.GET._mutable=Ture 爲了引出copy的做用(禁止使用)
 2.
       import copy
    recv_data = copy.copy(request.GET)
    print(type(recv_data)) 
    #使用copy 進行QueryDict(不可變)變爲可變類型
    
    
·······················request.py源碼·······················    
    def __copy__(self):
        result = self.__class__('', mutable=True, encoding=self.encoding)
        for key, value in six.iterlists(self):
            result.setlist(key, value)
        return result

    def __deepcopy__(self, memo):
        result = self.__class__('', mutable=True, encoding=self.encoding)
        memo[id(self)] = result
        for key, value in six.iterlists(self):
            result.setlist(copy.deepcopy(key, memo), copy.deepcopy(value, memo))
        return result

q查詢補充

字典的用法

**{serch_field:keyword}#出來的關鍵字
**{serch_field+'__contains':keyword}#字符串的拼接
這個想法比較侷限不能多條件查詢

單q查詢和多q查詢

流程
    1.由於雙下模糊查詢只能根據單個字段進行匹配 因此正常使用是根據字段雙下寫
    例如
    #name__contains=search_name
    2.若是要使用想根據本身篩選的值進行變更 須要用
        #Q()查詢
        使用 1.q=Q()實例化對象
            2.根據實例化對象進行字段替換 
                #把name__contains 換成傳入的search值                               search__contains
                #能夠根據本身傳入的字段進行替換
              <option value="qq__contains">qq</option>
              <option value="name__contains">姓名</option>

html
傳值
<div class="form-group">
          <select name="search_field" id="" class="form-control">
              <option value="qq__contains">qq</option>
              <option value="name__contains">姓名</option>
          </select>
          <input type="text" class="form-control" id="search-word" placeholder="請輸入" name="keyword">
      </div>
view寫法                
#單Q的使用
q=Q()
q.children.append([search,search_name]) 
#根據name對應的values值篩選
all_customers = models.Customer.objects.filter(q)
#多Q的使用
q=Q()
q.connector = 'or'#指定q對象中的查詢條件的鏈接符,或的關係,默認是and
q.children.append([search,search_name]) 
all_customers = models.Customer.objects.filter(Q(name__contains=search_name))


all_customers = models.Customer.objects.filter(Q(name__contains=search_name))

all_customers = models.Customer.objects.filter(q)

······················Q查詢源碼····························         
class Q(tree.Node):
    """
    Encapsulates filters as objects that can then be combined logically (using
    `&` and `|`).
    """
    # Connection types
    AND = 'AND'
    OR = 'OR'
    default = AND

request補充

recv=request.GET
取出的是一個字典
<QueryDict: {'page': ['2'], 'selectChoice': ['name__contains'], 'filter2': ['liye']}>
request.GET.urlencode() 取出除了路徑以外的全部url路徑(?以後的)
http://127.0.0.1:8000/customer/?selectChoice=qq__contains&filter2=333

路徑拼接

路徑不加/?page 直接變成路徑 127.0.0.1/?page

不加/  ?page=1 是當前頁拼接查詢
divmod(5,2)#(2,1)商和餘數
current——page 取出來的數 ?page=?。

搜索正文

搜索部分的寫法

low版不保留搜索數據

view.pydom

def customer(request):  
    select_form = myform.selectcustomerForm()
    current_page_number = request.GET.get('page')  # 當前頁碼
    search = request.GET.get('selectChoice')
    search_name = request.GET.get('filter2')
    print(current_page_number)
    print(search)
    print(search_name)
    # search_url=request.GET.urlencode()
    all_customers = models.Customer.objects.all()
    if search_name:
        q = Q()
        q.children.append([search, search_name])
        all_customers = models.Customer.objects.filter(q)

    print('老師', all_customers)
    total_count = all_customers.count()
    per_page_count = settings.PER_PAGE_COUNT
    page_number_show = settings.PAGE_NUMBER_SHOW

    page_obj = DQPage(current_page_number, total_count, per_page_count, page_number_show)

    all_customers = all_customers[page_obj.start_data_number:page_obj.end_data_number]  # 顯示頁面經過切片的形式 頁碼
    page_html = page_obj.page_html_func()
    return render(request, 'customer/customer.html', {
        'all_customers': all_customers,
        'page_html': page_html,
        'select_form': select_form,
    })

page.py (分頁組件)

查詢不到返回空 不寫返回就會查出負索引報錯
    @property
    def start_data_number(self):
        if not self.current_page_number:
            return 0
        return (self.current_page_number - 1) * self.per_page_count

    @property
    def end_data_number(self):
        if not self.current_page_number:
            return 0
        return self.current_page_number * self.per_page_count
    def page_html_func(self):




完整寫法
···········································
完整版寫法
from django.utils.safestring import mark_safe#django內置封裝了一個組件 至關於過濾器  '<h1>333</h1>|safe'識別字符串標籤


class DQPage:
    # self,current_page_number,total_count,per_page_count=10,page_number_show=7 傳參封裝屬性
    def __init__(self, current_page_number, total_count, per_page_count=10, page_number_show=7):
        """
        :param current_page_number:   當前頁碼
        :param total_count:    總數據量
        :param per_page_count:    每頁顯示多少條
        :param page_number_show:   總共顯示多少個頁碼
                total_page_count:總頁碼數

        start_page_number:起始頁碼
        end_page_number:結束頁碼

        """

        try:
            current_page_number = int(current_page_number)
        except Exception:
            current_page_number = 1

        half_number = page_number_show // 2
        a, b = divmod(total_count, per_page_count)
        # 若是餘數不爲0,頁碼總數爲商+1
        if b:
            total_page_count = a + 1
        else:
            total_page_count = a
        # total_page_count 最大頁數
        # 當前頁碼小於等於0的時候,默認顯示第一頁
        if current_page_number <= 0:
            current_page_number = 1
        # 若是當前頁碼數大於最大頁碼數 就默認最大頁碼數
        if current_page_number >= total_page_count:
            current_page_number = total_page_count
        # current_page_number 2
        # print(total_page_count)  # 2
        #先後分爲 123 4 567 4爲當前頁碼  防止若是選到3產生 012 3 456
        start_page_number = current_page_number - half_number  #
        end_page_number = current_page_number + half_number + 1  # 6
        # 若是起始頁面小於0 直接 默認顯示第一頁
        if start_page_number <= 0:
            start_page_number = 1
            end_page_number = page_number_show + 1  # 7
        # 若是結束頁面大於總頁數 或者遠超最大頁碼的現象 總共25  顯示   22,23,24   25  26,27,28
        if end_page_number >= total_page_count:  # 6 > 2
            start_page_number = total_page_count - page_number_show + 1  # -4
            end_page_number = total_page_count + 1  # 3
        #若是選擇只有兩條數據 不該該使用多分頁方式
        if total_page_count < page_number_show:
            start_page_number = 1#起始頁碼數
            end_page_number = total_page_count + 1#結束頁碼數
        # 把對應的數據封裝在對象屬性中
        self.current_page_number = current_page_number
        self.per_page_count = per_page_count
        self.total_page_count = total_page_count
        self.start_page_number = start_page_number
        self.end_page_number = end_page_number

    @property
    def start_data_number(self):
        if not self.current_page_number:
            return 0
        return (self.current_page_number - 1) * self.per_page_count

    @property
    def end_data_number(self):
        if not self.current_page_number:
            return 0
        return self.current_page_number * self.per_page_count
    def page_html_func(self):

        page_html = """
                   <nav aria-label="Page navigation">
                     <ul class="pagination">

                   """
        first_page = f"""
                       <li>
                         <a href="?page={1}" aria-label="Previous">
                           <span aria-hidden="true">首頁</span>
                         </a>
                       </li>"""
        page_html += first_page

        previous_page = f"""
                   <li>
                         <a href="?page={self.current_page_number - 1}" aria-label="Previous">
                           <span aria-hidden="true">&laquo;</span>
                         </a>
                       </li>"""
        page_html += previous_page

        for i in range(self.start_page_number, self.end_page_number):
            if i == self.current_page_number:

                page_html += f'<li class="active"><a href="?page={i}">{i}</a></li>'
            else:
                page_html += f'<li><a href="?page={i}">{i}</a></li>'

        next_page = f"""
                       <li>
                             <a href="?page={self.current_page_number + 1}" aria-label="Next">
                               <span aria-hidden="true">&raquo;</span>
                             </a>
                           </li>
           """
        page_html += next_page

        last_page = f"""
                           <li>
                             <a href="?page={self.total_page_count}" aria-label="Previous">
                               <span aria-hidden="true">尾頁</span>
                             </a>
                           </li>"""
        page_html += last_page

        page_html += """

                         </ul>
                       </nav>
                   """
        return mark_safe(page_html)

low版添加

1.若是 查詢出來的條件知足 就把page 拼接出來的字段在路徑裏 
2.就進行替換處理   
    http://127.0.0.1:8000/customer/? page=2&selectChoice=name__contains&filter2=liye
    recv_data.urlencode()    
    #出來的值就是   page=2&selectChoice=name__contains&filter2=liye
    #不然就 不進行篩選  傳遞原來的值
page_html += f"""<li><a href="?page={i}&{ self.recv_data.urlencode().replace('page='+str(self.current_page_number)+'&','') 
if 'page=' in self.recv_data.urlencode() 
else 
self.recv_data.urlencode() }">{i}</a></li>"""

高大上版保留數據

添加的功能
import copy
    recv_data = copy.copy(request.GET)
    print(type(recv_data)) #<class 'django.http.request.QueryDict'>
    # from django.http.request import QueryDict

完整版數據

from django.utils.safestring import mark_safe


class DQPage:

    def __init__(self,current_page_number,total_count,per_page_count=10,page_number_show=7,recv_data=None):
        """
        :param current_page_number:   當前頁碼
        :param total_count:    總數據量
        :param per_page_count:    每頁顯示多少條
        :param page_number_show:   總共顯示多少個頁碼

        start_page_number:起始頁碼
        end_page_number:結束頁碼
        """
        self.recv_data = recv_data

        try:
            current_page_number = int(current_page_number)
        except Exception:
            current_page_number = 1

        half_number = page_number_show // 2
        a, b = divmod(total_count, per_page_count)
        # 若是餘數不爲0,頁碼總數爲商+1
        if b:
            total_page_count = a + 1
        else:
            total_page_count = a
        # total_page_count 最大頁數
        # 噹噹前頁碼小於等於0的時候,默認顯示第一頁
        if current_page_number <= 0:
            current_page_number = 1

        if current_page_number >= total_page_count:
            current_page_number = total_page_count
        # current_page_number 2
        # print(total_page_count)  # 2
        start_page_number = current_page_number - half_number  #
        end_page_number = current_page_number + half_number + 1  # 6

        if start_page_number <= 0:
            start_page_number = 1
            end_page_number = page_number_show + 1  # 7

        if end_page_number >= total_page_count:  # 6 > 2
            start_page_number = total_page_count - page_number_show + 1  # -4
            end_page_number = total_page_count + 1  # 3

        if total_page_count < page_number_show:
            start_page_number = 1
            end_page_number = total_page_count + 1

        self.current_page_number = current_page_number
        self.per_page_count = per_page_count
        self.total_page_count = total_page_count
        self.start_page_number = start_page_number
        self.end_page_number = end_page_number

    @property
    def start_data_number(self):

        return (self.current_page_number - 1) * self.per_page_count

    @property
    def end_data_number(self):

        return self.current_page_number*self.per_page_count

    def page_html_func(self):

        page_html = """
                   <nav aria-label="Page navigation">
                     <ul class="pagination">

                   """
        self.recv_data['page'] = 1
        first_page = f"""
                       <li>
                         <a href="?{self.recv_data.urlencode()}" aria-label="Previous">
                           <span aria-hidden="true">首頁</span>
                         </a>
                       </li>"""
        page_html += first_page

        self.recv_data['page'] = self.current_page_number - 1
        previous_page = f"""
                   <li>
                         <a href="?{self.recv_data.urlencode()}" aria-label="Previous">
                           <span aria-hidden="true">&laquo;</span>
                         </a>
                       </li>"""
        page_html += previous_page

        for i in range(self.start_page_number,self.end_page_number):
            self.recv_data['page'] = i  #
            #<QueryDict: {'search_field': ['qq__contains'], 'keyword': ['123'],'page':'1'}>
            #page=2&search_field=qq__contains&keyword=12
            if i == self.current_page_number:

                page_html += f'<li class="active"><a href="?{self.recv_data.urlencode()}">{i}</a></li>'
            else:
                # page=2&search_field=qq__contains&keyword=123
                # page_html += f"""<li><a href="?page={i}&{ self.recv_data.urlencode().replace('page='+str(self.current_page_number)+'&','') if 'page=' in self.recv_data.urlencode() else self.recv_data.urlencode() }">{i}</a></li>"""
                page_html += f"""<li><a href="?{self.recv_data.urlencode()}">{i}</a></li>"""


        self.recv_data['page'] = self.current_page_number + 1
        next_page = f"""
                       <li>
                             <a href="?{self.recv_data.urlencode()}" aria-label="Next">
                               <span aria-hidden="true">&raquo;</span>
                             </a>
                           </li>
           """
        page_html += next_page

        self.recv_data['page'] = self.total_page_count
        last_page = f"""
                           <li>
                             <a href="?{self.recv_data.urlencode()}" aria-label="Previous">
                               <span aria-hidden="true">尾頁</span>
                             </a>
                           </li>"""
        page_html += last_page

        page_html += """

                         </ul>
                       </nav>
                   """
        return mark_safe(page_html)

page.py

增長功能
for i in range(self.start_page_number,self.end_page_number):
            self.recv_data['page'] = i  #
            #<QueryDict: {'search_field': ['qq__contains'], 'keyword': ['123'],'page':'1'}>

            
            
完整版數據


from django.utils.safestring import mark_safe


class DQPage:

    def __init__(self,current_page_number,total_count,per_page_count=10,page_number_show=7,recv_data=None):
        """
        :param current_page_number:   當前頁碼
        :param total_count:    總數據量
        :param per_page_count:    每頁顯示多少條
        :param page_number_show:   總共顯示多少個頁碼

        start_page_number:起始頁碼
        end_page_number:結束頁碼
        """
        self.recv_data = recv_data

        try:
            current_page_number = int(current_page_number)
        except Exception:
            current_page_number = 1

        half_number = page_number_show // 2
        a, b = divmod(total_count, per_page_count)
        # 若是餘數不爲0,頁碼總數爲商+1
        if b:
            total_page_count = a + 1
        else:
            total_page_count = a
        # total_page_count 最大頁數
        # 噹噹前頁碼小於等於0的時候,默認顯示第一頁
        if current_page_number <= 0:
            current_page_number = 1

        if current_page_number >= total_page_count:
            current_page_number = total_page_count
        # current_page_number 2
        # print(total_page_count)  # 2
        start_page_number = current_page_number - half_number  #
        end_page_number = current_page_number + half_number + 1  # 6

        if start_page_number <= 0:
            start_page_number = 1
            end_page_number = page_number_show + 1  # 7

        if end_page_number >= total_page_count:  # 6 > 2
            start_page_number = total_page_count - page_number_show + 1  # -4
            end_page_number = total_page_count + 1  # 3

        if total_page_count < page_number_show:
            start_page_number = 1
            end_page_number = total_page_count + 1

        self.current_page_number = current_page_number
        self.per_page_count = per_page_count
        self.total_page_count = total_page_count
        self.start_page_number = start_page_number
        self.end_page_number = end_page_number

    @property
    def start_data_number(self):

        return (self.current_page_number - 1) * self.per_page_count

    @property
    def end_data_number(self):

        return self.current_page_number*self.per_page_count

    def page_html_func(self):

        page_html = """
                   <nav aria-label="Page navigation">
                     <ul class="pagination">

                   """
        self.recv_data['page'] = 1
        first_page = f"""
                       <li>
                         <a href="?{self.recv_data.urlencode()}" aria-label="Previous">
                           <span aria-hidden="true">首頁</span>
                         </a>
                       </li>"""
        page_html += first_page

        self.recv_data['page'] = self.current_page_number - 1
        previous_page = f"""
                   <li>
                         <a href="?{self.recv_data.urlencode()}" aria-label="Previous">
                           <span aria-hidden="true">&laquo;</span>
                         </a>
                       </li>"""
        page_html += previous_page

        for i in range(self.start_page_number,self.end_page_number):
            self.recv_data['page'] = i  #
            #<QueryDict: {'search_field': ['qq__contains'], 'keyword': ['123'],'page':'1'}>
            #page=2&search_field=qq__contains&keyword=12
            if i == self.current_page_number:

                page_html += f'<li class="active"><a href="?{self.recv_data.urlencode()}">{i}</a></li>'
            else:
                # page=2&search_field=qq__contains&keyword=123
                # page_html += f"""<li><a href="?page={i}&{ self.recv_data.urlencode().replace('page='+str(self.current_page_number)+'&','') if 'page=' in self.recv_data.urlencode() else self.recv_data.urlencode() }">{i}</a></li>"""
                page_html += f"""<li><a href="?{self.recv_data.urlencode()}">{i}</a></li>"""


        self.recv_data['page'] = self.current_page_number + 1
        next_page = f"""
                       <li>
                             <a href="?{self.recv_data.urlencode()}" aria-label="Next">
                               <span aria-hidden="true">&raquo;</span>
                             </a>
                           </li>
           """
        page_html += next_page

        self.recv_data['page'] = self.total_page_count
        last_page = f"""
                           <li>
                             <a href="?{self.recv_data.urlencode()}" aria-label="Previous">
                               <span aria-hidden="true">尾頁</span>
                             </a>
                           </li>"""
        page_html += last_page

        page_html += """

                         </ul>
                       </nav>
                   """
        return mark_safe(page_html)

一個坑

須要進行轉換querydict轉換

import copy
    recv_data = copy.copy(request.GET)
    print(type(recv_data)) #<class 'django.http.request.QueryDict'>
    # from django.http.request import QueryDict

統一html頁面寫法

<div class="form-group">
          <select name="search_field" id="" class="form-control">
              <option value="qq__contains">qq</option>
              <option value="name__contains">姓名</option>
          </select>
          <input type="text" class="form-control" id="search-word" placeholder="請輸入" name="keyword">
      </div>

crm 批量添加腳本

步驟
1.把查詢的對象放入字典裏一次性傳入前端進行交互    
    # bulk_create
   # django外部文件使用django環境
import os

if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "IGnb.settings")
    import django
    django.setup()


    import random
    from sales import models


    sex_type = (('male', '男性'), ('female', '女性')) #

    source_type = (('qq', "qq羣"),
                   ('referral', "內部轉介紹"),
                   ('website', "官方網站"),
                   ('baidu_ads', "百度推廣"),
                   ('office_direct', "直接上門"),
                   ('WoM', "口碑"),
                   ('public_class', "公開課"),
                   ('website_luffy', "路飛官網"),
                   ('others', "其它"),)
    course_choices = (('LinuxL', 'Linux中高級'),
                      ('PythonFullStack', 'Python高級全棧開發'),)
    print(random.choice(sex_type))
    obj_list = []
    for i in range(251):
        obj = models.Customer(
            qq=f"{i+1}236798",
            name=f'liye{i}',
            sex=random.choice(sex_type)[0],
            source=random.choice(source_type)[0],
            course=random.choice(course_choices)[0],

        )
        obj_list.append(obj)

    models.Customer.objects.bulk_create(obj_list)

分頁組件

from django.utils.safestring import mark_safe


class DQPage:
    #self,current_page_number,total_count,per_page_count=10,page_number_show=7 傳參封裝屬性
    def __init__(self,current_page_number,total_count,per_page_count=10,page_number_show=7):
        """
        :param current_page_number:   當前頁碼
        :param total_count:    總數據量
        :param per_page_count:    每頁顯示多少條
        :param page_number_show:   總共顯示多少個頁碼
                total_page_count:總頁碼數

        start_page_number:起始頁碼
        end_page_number:結束頁碼
        
        """
        #防止輸入的頁碼爲不是數字類型
        try:
            current_page_number = int(current_page_number)
        except Exception:
            current_page_number = 1

        half_number = page_number_show // 2
        a, b = divmod(total_count, per_page_count)
        # 若是餘數不爲0,頁碼總數爲商+1
        if b:
            total_page_count = a + 1
        else:
            total_page_count = a
        # total_page_count 最大頁數
        #當前頁碼小於等於0的時候,默認顯示第一頁
        if current_page_number <= 0:
            current_page_number = 1
        #若是當前頁碼大於最大頁碼就顯示最大頁碼
        if current_page_number >= total_page_count:
            current_page_number = total_page_count
        # current_page_number 2
        # print(total_page_count)  # 2
        start_page_number = current_page_number - half_number  #
        end_page_number = current_page_number + half_number + 1  # 6
        #若是起始頁面小於0 直接 默認顯示第一頁
        if start_page_number <= 0:
            start_page_number = 1
            end_page_number = page_number_show + 1  # 7
        #若是結束頁碼大於總頁面 最大頁碼減去 每頁顯示的頁碼 是起始頁碼
        if end_page_number >= total_page_count:  # 6 > 2
            start_page_number = total_page_count - page_number_show + 1  # -4
            end_page_number = total_page_count + 1  # 3
        #總頁碼 不足要求的頁碼數
        if total_page_count < page_number_show:
            start_page_number = 1
            end_page_number = total_page_count + 1
        #把對應的數據封裝在對象屬性中
        self.current_page_number = current_page_number
        self.per_page_count = per_page_count
        self.total_page_count = total_page_count
        self.start_page_number = start_page_number
        self.end_page_number = end_page_number

    @property#把起始頁碼封裝到一個僞屬性方法 
    def start_data_number(self):

        return (self.current_page_number - 1) * self.per_page_count

    @property#把最後頁碼封裝到一個僞屬性方法 
    def end_data_number(self):

        return self.current_page_number*self.per_page_count

    def page_html_func(self):

        page_html = """
                   <nav aria-label="Page navigation">
                     <ul class="pagination">

                   """
        first_page = f"""
                       <li>
                         <a href="?page={1}" aria-label="Previous">
                           <span aria-hidden="true">首頁</span>
                         </a>
                       </li>"""
        page_html += first_page

        previous_page = f"""
                   <li>
                         <a href="?page={self.current_page_number - 1}" aria-label="Previous">
                           <span aria-hidden="true">&laquo;</span>
                         </a>
                       </li>"""
        page_html += previous_page

        for i in range(self.start_page_number,self.end_page_number):
            if i == self.current_page_number:
#把每一頁都循環出來 變成當前打印的數量
#current_page_number當前頁
                page_html += f'<li class="active"><a href="?page={i}">{i}</a></li>'
            else:
                page_html += f'<li><a href="?page={i}">{i}</a></li>'

        next_page = f"""
                       <li>
                             <a href="?page={self.current_page_number + 1}" aria-label="Next">
                               <span aria-hidden="true">&raquo;</span>
                             </a>
                           </li>
           """
        page_html += next_page

        last_page = f"""
                           <li>
                             <a href="?page={self.total_page_count}" aria-label="Previous">
                               <span aria-hidden="true">尾頁</span>
                             </a>
                           </li>"""
        page_html += last_page

        page_html += """

                         </ul>
                       </nav>
                   """
        return mark_safe(page_html)
相關文章
相關標籤/搜索