雙層選單細節完善

2022-02-14 08:56:25 字數 3865 閱讀 7779

1.可切片

2.可迭代

3.惰性查詢

:為了節省記憶體

book_list=book.objects.all()惰性查詢

,先取出

queryset

但是不會立刻執行

sql語句

,什麼時 候用什麼時候執行

何時用到查詢集:

print(book_list)

for...

切片if book_list

4.快取機制

(快取到記憶體

)book.objects.all()

簡單的列印queryset不會快取

,執行兩次

sql語句

print(book_list)

print(book_list)

正常的會快取

for obj in book_list

for obj in book_list

執行兩次時,sql之執行一次

每個queryset會維持乙個快取空間

,優點:一次查詢

,多次使用

book.objects.all().iterator() #生成器物件  將

queryset

封裝到生成器中

缺點:只能向下

,只能用一次

1.二級選單預設顯示

在過濾器中:

1 @register.inclusion_tag("

rbac/menu.html")

2def

get_menu_styles(request):

3 permission_menu_dict = request.session.get("

permission_menu_dict")

4print("

permission_menu_dict

",permission_menu_dict)

5for val in

permission_menu_dict.values():

6for item in val["

children"]:

7 val["

class

"]="

hide

"8 ret=re.search("

^{}$

".format(item["

url"

]),request.path)9if

ret:

10 val["

class

"]=""

#為permission_menu_dict增加乙個欄位class

11return

在與過濾器對應的menu.html中

:

1

class="

multi-menu

">

2

3class="

item

">

4class="

title

">class="

}">}

5class="

body }

"> #

為body新增hide類名

6 7"

}">}

8 910

11

12

2.沒有許可權的按鈕不顯示

做法一:給按鈕的顯示加乙個判斷

1 

2class="

btn btn-default

" href="

/customer/add/

">

3class="

fa fa-plus-square

" aria-hidden="

true

">

新增客戶

45

缺點:所有的按鈕都要判斷

做法二:.沒有許可權的按鈕不顯示

(過濾器版本

)做法封裝到乙個過濾器中,避免**冗餘

,前端在需要的地方呼叫即可

過濾器部分:

1

@register.filter

2def

has_permission(btn_url,request):

3 permission_names = request.session.get("

permission_list")

4return btn_url in permission_list

前端呼叫部分:

1 2 3

class="

btn btn-default

" href="

/customer/add/

">

4class="

fa fa-plus-square

" aria-hidden="

true

">

新增客戶

56

刪除,編輯部分

:表頭:

1 2編輯

3 4 5刪除

6

表內容:

1 23

"color: #333333;

" href="

/customer/edit/}/

">

4class="

fa fa-edit

" aria-hidden="

true

">56

7 89"

color: #d9534f;

" href="

/customer/del/}/

">class="

fa fa-trash-o

">

1011

缺點:做法麻煩

做法三:新增乙個字段

,以後用的時候就不用考慮路徑的正則問題

給permision加乙個別名字段

取出來並注入session

1 permission_names=

2for item in

permissions:

permissions__name

"])

過濾器中使用:

1

@register.filter

2def

has_permission(btn_url,request):

3 permission_names=request.session.get("

permission_names")

4print("

permission_names

",permission_names)

5return btn_url in permission_names

前端使用:

1 23

"color: #333333;

" href="

/customer/edit/}/

">

4class="

fa fa-edit

" aria-hidden="

true

">56

7 89"

color: #d9534f;

" href="

/customer/del/}/

">class="

fa fa-trash-o

">

1011