Меню и навигация¶
Существует четыре тега шаблонов для использования в шаблонах, которые связаны с меню:
Чтобы использовать любой из этих тегов шаблона, вам необходимо иметь {% 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
- Справочник
- Меню и навигация
- Справочник