Esempio n. 1
0
def breadcrumbs_with_siblings(page: Page, separator='', include_self=False):
    def get_siblings(page):
        def is_node(page):
           return hasattr(page.model, 'children')

        if not is_node(page):
            return []

        siblings = page.get_siblings().select_related(page.related_model_name)

        return [
            sibling
            for sibling in siblings
            if is_node(sibling)
        ]

    def get_ancestors_crumbs() -> list:
        ancestors_query = (
            page
            .get_ancestors(include_self)
            .select_related(page.related_model_name)
            .active()
        )

        if not ancestors_query.exists():
            return []

        catalog, *ancestors = ancestors_query

        siblings = [
            get_siblings(ancestor)
            for ancestor in ancestors
        ]

        return [
            (catalog.display_menu_title, catalog.url, []),
            *[
                (crumb.display_menu_title, crumb.url, crumb_links)
                for crumb, crumb_links in zip(ancestors, siblings)
            ],
        ]

    index = page.get_index()

    crumbs_list = [
        (index.display_menu_title, index.url, []) if index else ('Main', '/', []),
        *get_ancestors_crumbs(),
        (page.display_menu_title, '', get_siblings(page))
    ]

    return {
        'index_slug': index.url if index else '/',
        'crumbs_list': crumbs_list,
        'separator': separator,
    }
Esempio n. 2
0
def breadcrumbs(page: Page, separator=''):
    index = page.get_index()

    crumbs_list = (
        (index.display_menu_title, index.url) if index else ('Main', '/'),
        *page.get_ancestors_fields('display_menu_title', 'url', include_self=False),
        (page.display_menu_title, '')
    )

    return {
        'crumbs_list': crumbs_list,
        'separator': separator,
    }