標籤:[] direct ref 處理 end one header remove lis
Stark組件擴充url
這個功能在很多地方都要用到
這裡舉例的需求是在customer查看頁面中,點擊諮詢課程中的某一個課程名稱就會將這個課程與對應的同學解除綁定(不再顯示)
要實現這個需求需要新添加一條url,這條url中我們可以擷取想要解除綁定的課程id和表中這條記錄的主鍵
方法與filter、pop等功能相同,都是在表所對應的自己的配置類中設定,從而實現之後這種表才有這條獨立的url
在stark.py中,我們給Customer這張表設定獨立的配置類,extra_url會返回一個url,對應的視圖函數為self.cancel_course:
class CustomerConfig(ModelStark): #處理課程的顯示樣式和每個課程對應的url,url中帶有要解除綁定的課程id和表中這條記錄的主鍵id def display_course(self, obj=None, is_header=False): if is_header: return "諮詢課程" temp = [] for course_obj in obj.course.all(): s = "<a href=‘/stark/crm/customer/cancel_course/%s/%s‘ style=‘border:1px solid #369;padding:3px 6px‘><span>%s</span></a> " % (obj.pk, course_obj.pk, course_obj.name) temp.append(s) return mark_safe("".join(temp)) #視圖函數,實現點擊後刪除功能 def cancel_course(self, request, customer_id, course_id): obj = Customer.objects.filter(pk=customer_id).first() obj.course.remove(course_id) #返回當前表的查看頁面 return redirect(self.get_list_url()) #新的url,點擊相應課程就會走到這條url來,這是只單獨為Customer添加一條url def extra_url(self): temp = [] temp.append(url(r"cancel_course/(\d+)/(\d+)", self.cancel_course)) return tempsite.register(Customer, CustomerConfig)
在sites.py中,我們設定一個通用的extra_url功能,但返回是空,所以其他表對應的url中沒有cancel_course/(\d+)/(\d+):
class ModelStark(): #配置類 def extra_url(self): return [] #我們在二級分發中將這條url添加到temp列表中 def get_urls2(self): #額外添加一個url temp.extend(self.extra_url()) return temp
stark組件5_擴充url