A NavigationNode has attributes such as URL, title, parent and children - as one would expect in a navigation tree.

Warning

You can’t assume that a menus.base.NavigationNode represents a django CMS Page. Firstly, some nodes may
represent objects from other applications. Secondly, you can’t expect to be be able to access Page objects via
NavigationNodes.

Let’s look at an example using the {% show_menu %} templatetag. It will be different for other templatetags, and your applications might have their own menu classes. But this should help explain what’s going on and what the menu system is doing.

One thing to understand is that the system passes around a list of nodes, doing various things to it.

Many of the methods below pass this list of nodes to the ones it calls, and return them to the ones that they were in turn called by.

Don’t forget that show_menu recurses - so it will do all of the below for each level in the menu.