7. Расширение навигационного меню¶
Вы могли заметить, что, хотя наше приложение Polls было интегрировано в CMS, с плагинами, пунктами меню панели инструментов и так далее, навигационное меню сайта по-прежнему определяется только django CMS Pages.
Мы можем подключиться к системе меню django CMS, чтобы добавить наши собственные узлы в это навигационное меню.
7.1. Создайте навигационное меню¶
Мы создаем меню, используя подкласс CMSAttachMenu
, и используем метод get_nodes()
для добавления узлов.
Для этого нам нужен файл с именем cms_menus.py
в нашем приложении. Добавьте cms_menus.py
в polls_cms_integration/
:
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from cms.menu_bases import CMSAttachMenu
from menus.base import NavigationNode
from menus.menu_pool import menu_pool
from polls.models import Poll
class PollsMenu(CMSAttachMenu):
name = _("Polls Menu") # give the menu a name this is required.
def get_nodes(self, request):
"""
This method is used to build the menu tree.
"""
nodes = []
for poll in Poll.objects.all():
node = NavigationNode(
title=poll.question,
url=reverse('polls:detail', args=(poll.pk,)),
id=poll.pk, # unique id for this node within the menu
)
nodes.append(node)
return nodes
menu_pool.register_menu(PollsMenu)
Что здесь происходит:
мы определяем класс
PollsMenu
и регистрируем егоприсваиваем классу атрибут
name
(будет отображаться в админке)в его методе
get_nodes()
, мы строим и возвращаем список узлов, где:сначала мы получаем все объекты
Poll
… и затем создать объект
NavigationNode
из каждого из них.… и вернуть список этих
NavigationNodes
.
Этот класс меню не будет ничего делать, пока не будет прикреплен к странице. В Дополнительных настройках страницы, к которой вы ранее прикрепили apphook, выберите «Меню опросов» из списка Прикрепленное меню и сохраните еще раз. (Вы можете добавить меню на любую страницу, но логичнее всего добавить его на эту страницу).
Вы можете заставить меню автоматически добавляться на страницу с помощью apphook, если считаете это целесообразным. См. Добавление меню в apphooks для получения информации о том, как это сделать.
Примечание
Смысл здесь в том, чтобы проиллюстрировать основные принципы. В этом реальном случае обратите внимание на то, что:
Если вы собираетесь использовать вложенные страницы, вам нужно будет улучшить стиль меню, чтобы оно работало немного лучше.
Поскольку на странице «Опросы» все равно перечислены все опросы, это не самое практичное дополнение к меню.
Django CMS 3.9
Содержание
- Учебники
- Руководства по эксплуатации
- Справочник
- Основные темы
- Вклад
- Примечания к выпуску и информация об обновлении
- Использование django CMS
Дополнительно
Вы здесь:
-
Документация Django Django CMS 3.9
- Учебники
- 7. Расширение навигационного меню
- Учебники