self._cache = {}
def __getitem__(self, key):
- return Navigation.objects.get_for_node(self.node, key)
- #if key not in self._cache:
- # try:
- # self._cache[key] = Navigation.objects.get_for_node(self.node, key)
- # except Navigation.DoesNotExist:
- # self._cache[key] = None
- #return self._cache[key]
+ if key not in self._cache:
+ try:
+ self._cache[key] = Navigation.objects.get_for_node(self.node, key)
+ except Navigation.DoesNotExist:
+ self._cache[key] = None
+ return self._cache[key]
def navigation(self):
"node__%s__gte" % opts.right_attr: right,
"node__%s" % opts.tree_id_attr: tree_id
}
- navs = self.filter(key=key, **kwargs).order_by('-node__%s' % opts.level_attr)
+ navs = self.filter(key=key, **kwargs).select_related('node').order_by('-node__%s' % opts.level_attr)
nav = navs[0]
roots = nav.roots.all().select_related('target_node').order_by('order')
item_opts = NavigationItem._mptt_meta
by_pk[root.pk] = root
tree_ids.append(getattr(root, item_opts.tree_id_attr))
root._cached_children = []
- root.target_node.get_path(root=site_root_node)
+ if root.target_node:
+ root.target_node.get_path(root=site_root_node)
root.navigation = nav
kwargs = {
parent_pk = getattr(item, '%s_id' % item_opts.parent_attr)
item.parent = by_pk[parent_pk]
item.parent._cached_children.append(item)
- item.target_node.get_path(root=site_root_node)
+ if item.target_node:
+ item.target_node.get_path(root=site_root_node)
cached = roots
cache.set(cache_key, cached)