without specifying a parent page so that primary pages are first rendered, and only passes in the menu template to use. The second file is the actual menu template that includes itself recursively for each branch in the menu. We could even specify a different menu template in the call to page_menu in our menu template, if we wanted to use a different layout for child pages. Each Page instance has a field in_menus which specifies which menus the page should appear in. In the admin interface, the in_menus field is a list of checkboxes for each of the menu templates. The menu choices for the in_menus field are defined by the PAGE_MENU_TEMPLATES setting, which is a sequence of menu templates. Each item in the sequence is a three item sequence, containing a unique ID for the template, a label for the template, and the template path. For example in your settings.py module: The selections made for the in_menus field on each page don't actually filter a page from being included in the page_branch variable that contains the list of pages for the current branch. Instead it's used to set the value of page.in_menu for each page in the menu template, so it's up to your menu template to check the page's in_menu attribute explicitly, in order to exclude it: Note that if a menu template is not defined in the PAGE_MENU_TEMPLATES setting, the branch pages supplied to it will always have the in_menu attribute set to True , so