1. 程式人生 > >stark - 4 ? 視圖函數

stark - 4 ? 視圖函數

instance 基本功 推出 change rbo 內容 del 技術分享 獲取

? list_view

1.處理表格(默認是顯示表結構的所有字段)

 1 list_display = self.get_list_display()
 2 # 4.1處理表頭
 3 header_list = []
 4 if list_display:
 5     for multi_key in list_display:
 6         if isinstance(multi_key,FunctionType):  #判斷 傳入值是否為函數
 7             verbose_name = multi_key(self,obj=None,is_header=True)
8 else: 9 verbose_name = self.model_class._meta.get_field(multi_key).verbose_name 10 header_list.append(verbose_name) 11 else: 12 header_list.append(self.model_class._meta.model_name) 13 14 # 4.2處理表的內容 15 data_list = queryset[pager.start:pager.end] 16 17 body_list = []
18 for row in data_list: #row 是UserInfo object (1) 19 row_list = [] 20 21 if list_display: 22 for multi_key in list_display: 23 if isinstance(multi_key,FunctionType): 24 row_list.append(multi_key(self,row,is_header=False,*args,**kwargs)) 25 else
: 26 row_list.append(getattr(row,multi_key)) #獲取UserInfo object (1)的屬性 27 else: 28 row_list.append(row) 29 30 body_list.append(row_list)

為了能夠擴展以後業務的功能(推出新的業務,高級用戶可能要顯示多的列或者新的功能),我們可以針對某張表進行自定義修改定制。只需在自己的Handler子類重寫此方法

這是StarkHandler類的方法
1
list_display = [] 2 def get_list_display(self): 3 """ 4 獲取頁面上應該顯示的列,預留自定義擴展 5 :return: 6 """ 7 field_list = [] 8 field_list.extend(self.list_display) 9 return field_list

在上面方法的架構基礎下,實現以往對表〔編輯〕〔刪除〕的基本功能

如圖 技術分享圖片

 1 def display_edit(self,obj=None,is_header=None):
 2     """
 3     生成<編輯>a標簽
 4     :param obj:
 5     :param is_header:
 6     :return:
 7     """
 8     if is_header:
 9         return "編輯操作"
10     change_url = self.reverse_change_url(pk=obj.pk)
11     return mark_safe(<a href="%s">編輯</a>%change_url)
12 
13 def display_delete(self,obj=None,is_header=None):
14     """
15     生成<刪除>a標簽
16     :param obj:
17     :param is_header:
18     :return:
19     """
20     if is_header:
21         return "刪除操作"
22     delete_url = self.reverse_delete_url(pk=obj.pk)
23     return mark_safe(<a href="%s">刪除</a>% delete_url)

示例:

技術分享圖片
 1 #models.py下的Major類:
 2 #class Major(models.Model):
 3 #    title = models.CharField(verbose_name=‘專業‘,max_length=32)
 4 #
 5 #    def __str__(self):
 6 #        return self.title
 7 
 8 #該model類view函數下,繼承StarkHanler,list_display[字段+方法]:
 9 from stark.service.v1 import StarkHandler
10 
11 class MajorHandler(StarkHandler):
12     list_display = [title,StarkHandler.display_edit,StarkHandler.display_delete]
View Code

stark - 4 ? 視圖函數