stark - 4 ? 視圖函數
阿新 • • 發佈:2019-04-15
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 ? 視圖函數