dict的特性,key可以是None
>>> def f(): a=[2,3] return a #函数返回local变量 >>> a=f() >>> a [2, 3] >>> l=[a or {}] >>> l [[2, 3]] >>> a=None >>> l=[a or {}] >>> l [{}] >>> d={2:3} >>> d.get(None,[]) [] >>> d={None:5} #None作为key >>> d[None] 5 >>> d.get(None) 5 >>>
有关page_menu的总结:
1 如果context中没有menu_pages,那么就会把当前用户的所有page查找出来,并在context中生成各page的父id,是id的映射,同时记录各page的子页,defaultdict词典保存各page的子页列表。
2 获取page_branch,某页的所有子page。
context["page_branch"] = context["menu_pages"].get(parent_page_id, [])
3 各page的level计算:context["branch_level"] = getattr(parent_page, "branch_level", 0) + 1
4 没有指定模板文件的,使用前一次使用page_menu时的模板。模板中使用page_menu标签时,就是模板本身。