Меню и навигация¶
Существует четыре тега шаблонов для использования в шаблонах, которые связаны с меню:
Чтобы использовать любой из этих тегов шаблона, вам необходимо иметь {% load menu_tags %} в вашем шаблоне перед строкой, на которой вы вызываете тег шаблона.
Примечание
Обратите внимание, что меню живут в приложении menus, которое хотя и тесно связано с приложением cms, существует независимо от него. Меню можно использовать в любом приложении, а не только в django CMS.
show_menu¶
Тег show_menu отображает навигацию текущей страницы. Вы можете переписать внешний вид и HTML, если добавите шаблон menu/menu.html в свой проект или отредактируете тот, что поставляется с django CMS. show_menu принимает шесть необязательных параметров: start_level, end_level, extra_inactive, extra_active, namespace и root_id.
Первые два параметра, start_level (по умолчанию=0) и end_level (по умолчанию=100), определяют, с какого уровня должна отображаться навигация и на каком уровне она должна остановиться. Если у вас корневым узлом является home (т.е. уровень 0) и вы не хотите отображать корневой узел (узлы), установите start_level в 1.
Третий параметр, extra_inactive (по умолчанию=0), определяет, сколько уровней навигации должно отображаться, если узел не является прямым предком или потомком текущего активного узла.
Четвертый параметр, extra_active (по умолчанию=100), определяет, сколько уровней потомков активного узла должно быть отображено.
Пятый параметр, namespace, в настоящее время не реализован.
Шестой параметр root_id задает идентификатор корневого узла.
Вы можете снабдить тег параметром template.
Некоторые примеры¶
Полная навигация (в виде вложенного списка):
{% load menu_tags %}
<ul>
{% show_menu 0 100 100 100 %}
</ul>
Навигация с активным деревом (в виде вложенного списка):
<ul>
{% show_menu 0 100 0 100 %}
</ul>
Навигация только с одним активным дополнительным уровнем:
<ul>
{% show_menu 0 100 0 1 %}
</ul>
Уровень 1 навигации (в виде вложенного списка):
<ul>
{% show_menu 1 %}
</ul>
Навигация с помощью пользовательского шаблона:
{% show_menu 0 100 100 100 "myapp/menu.html" %}
show_menu_below_id¶
Если вы задали id в расширенных настройках страницы, вы можете отобразить подменю этой страницы с помощью тега шаблона. Например, у нас есть страница под названием meta, которая не отображается в навигации и имеет id «meta»:
<ul>
{% show_menu_below_id "meta" %}
</ul>
Вы можете задать ему те же необязательные параметры, что и show_menu:
<ul>
{% show_menu_below_id "meta" 0 100 100 100 "myapp/menu.html" %}
</ul>
Однако, в отличие от show_menu, мягкие корни не влияют на меню при использовании show_menu_below_id.
показать_под_меню¶
Отображает подменю текущей страницы (в виде вложенного списка).
Первый аргумент, levels (default=100), определяет, на сколько уровней вглубь должно быть отображено подменю.
Второй аргумент, root_level (default=None), указывает, на каком уровне, если таковой имеется, меню должно иметь свой корень. Например, если root_level равен 0, то меню будет начинаться с этого уровня, независимо от того, на каком уровне находится текущая страница.
Третий аргумент, nephews (default=100), определяет, сколько уровней племянников (детей братьев и сестер) будет показано.
Четвертый аргумент, template (default=menu/sub_menu.html), является шаблоном, используемым тегом; если вы хотите использовать другой шаблон, вы должны предоставить значения по умолчанию для root_level и nephews.
Примеры:
<ul>
{% show_sub_menu 1 %}
</ul>
Укоренение на уровне 0:
<ul>
{% show_sub_menu 1 0 %}
</ul>
Или с помощью пользовательского шаблона:
<ul>
{% show_sub_menu 1 None 100 "myapp/submenu.html" %}
</ul>
показать_хлебную крошку¶
Отображает навигационные хлебные крошки текущей страницы. Шаблон HTML можно найти по адресу menu/breadcrumb.html.:
{% show_breadcrumb %}
Или с пользовательским шаблоном и отображением только уровня 2 или выше:
{% show_breadcrumb 2 "myapp/breadcrumb.html" %}
Обычно в хлебных крошках отображаются только страницы, видимые в навигации. Чтобы включить все страницы в хлебную крошку, напишите:
{% show_breadcrumb 0 "menu/breadcrumb.html" 0 %}
Если текущий URL не обрабатывается CMS или расширителем навигации, текущий узел меню не может быть определен. В этом случае вам может понадобиться предоставить собственную хлебную крошку через шаблон. В основном это необходимо для таких страниц, как вход в систему, выход из системы и сторонние приложения. Этого можно легко добиться с помощью блока, который вы перезаписываете в своих шаблонах.
Например, в вашем base.html:
<ul>
{% block breadcrumb %}
{% show_breadcrumb %}
{% endblock %}
<ul>
А затем в шаблоне вашего приложения:
{% block breadcrumb %}
<li><a href="/">home</a></li>
<li>My current page</li>
{% endblock %}
Свойства узлов навигации в шаблонах¶
{{ node.is_leaf_node }}
Он последний на дереве? Если это так, то у него нет детей.
{{ node.level }}
Уровень узла. Начинается с 0.:
{{ node.menu_level }}
Уровень узла от корневого узла меню. Начинается с 0. Если ваше меню начинается с уровня 1 или у вас есть «мягкий корень» (описанный в следующем разделе), первый узел все равно будет иметь 0 в качестве menu_level.:
{{ node.get_absolute_url }}
Абсолютный URL узла, без указания протокола, домена или порта.:
{{ node.title }}
Заголовок на текущем языке узла.:
{{ node.selected }}
Если true, то этот узел является текущим выбранным/активным на данном URL.:
{{ node.ancestor }}
Если true, то этот узел является предком текущего выбранного узла.:
{{ node.sibling }}
Если true, то этот узел является родственником текущего выделенного узла.:
{{ node.descendant }}
Если true, то этот узел является потомком текущего выбранного узла.:
{{ node.soft_root }}
Если true, то этот узел является soft root. Страница может быть отмечена как мягкий корень в ее «Расширенных настройках».
Изменение и расширение меню¶
Обратитесь к документации Как настроить меню навигации.
Классы и функции системы меню¶
menu приложение¶
-
class
menus.base.Menu¶ Базовый класс для всех классов, генерирующих меню.
-
get_nodes(self, request)¶ Каждый подкласс
Menuдолжен возвращать список экземпляров NavigationNode.
-
-
class
menus.base.Modifier¶ Базовый класс для всех классов, модифицирующих меню. Модификатор добавляет, удаляет или изменяет NavigationNodes в списке.
-
modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb)¶ Каждый подкласс
Modifierдолжен реализовать методmodify().
-
-
class
menus.menu_pool.MenuPool¶ -
get_nodes()¶
-
discover_menus()¶
-
apply_modifiers()¶
-
_build_nodes()¶
-
_mark_selected()¶
-
-
menus.menu_pool._build_nodes_inner_for_one_menu()¶
-
menus.templatetags.menu_tags.cut_levels()¶
-
class
menus.base.NavigationNode(title, url, id[, parent_id=None][, parent_namespace=None][, attr=None][, visible=True])¶ Каждый узел в дереве меню представлен экземпляром
NavigationNode.- Параметры
title (str) – Заголовок, под которым будет отображаться данный пункт меню.
url (str) – URL, связанный с этим пунктом меню.
id – Уникальный (для текущего дерева) идентификатор этого элемента.
parent_id – Необязательно, идентификатор родительского элемента.
parent_namespace – Необязательно, пространство имен родителя.
attr (dict) – Необязательный, словарь дополнительной информации для хранения на этом узле.
visible (bool) – Необязательно, по умолчанию имеет значение
True, является ли этот элемент видимым или нет.
-
attr¶ Словарь, предоставляемый для того, чтобы к узлу можно было добавить произвольные атрибуты - размещение их непосредственно на самом узле может привести к столкновению с существующим или будущим атрибутом.
Важным ключом в этом словаре является
is_page: еслиTrue, узел представляет объект django CMSPage.Узлы, представляющие страницы CMS, имеют следующие ключи в
attr:auth_required (bool) - требуется ли аутентификация для доступа к этой странице
is_page (bool) - Всегда истина
navigation_extenders (список) - навигационные расширители, подключенные к данному узлу
redirect_url (str) - URL перенаправления страницы (если есть)
reverse_id (str) - уникальный идентификатор страницы
soft_root (bool) - является ли страница мягким корнем
видимый_для_аутентифицированных (bool) - виден для аутентифицированных пользователей
visible_for_anonymous (bool) - виден для анонимных пользователей
-
get_descendants()¶ Возвращает список всех дочерних элементов под текущим пунктом меню.
-
get_ancestors()¶ Возвращает список всех родительских пунктов, исключая текущий пункт меню.
-
get_absolute_url()¶ Утилитарный метод для возврата URL, связанного с данным пунктом меню, в первую очередь для соблюдения соглашения об именовании, утверждаемого Django.
-
get_menu_title()¶ Утилитарный метод для возврата связанного заголовка, используя то же соглашение об именовании, что и
cms.models.Page.
-
class
menus.modifiers.Marker¶
-
class
menus.modifiers.AuthVisibility¶
cms приложение¶
-
class
cms.menu.CMSMenu¶ Подкласс
menus.base.Menu. Егоget_nodes()создает список NavigationNodes на основе объектовPage.
-
class
cms.menu.NavExtender¶
-
class
cms.menu.SoftRootCutter¶
-
class
cms.menu_bases.CMSAttachMenu¶
Django CMS 3.9
Содержание
- Учебники
- Руководства по эксплуатации
- Справочник
- Основные темы
- Вклад
- Примечания к выпуску и информация об обновлении
- Использование django CMS
Дополнительно
Вы здесь:
-
Документация Django Django CMS 3.9
- Справочник
- Меню и навигация
- Справочник