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 temp
site.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