Вы могли заметить, что, хотя наше приложение Polls было интегрировано в CMS, с плагинами, пунктами меню панели инструментов и так далее, навигационное меню сайта по-прежнему определяется только django CMS Pages.
Мы можем подключиться к системе меню django CMS, чтобы добавить наши собственные узлы в это навигационное меню.
Мы создаем меню, используя подкласс CMSAttachMenu, и используем метод get_nodes() для добавления узлов.
Для этого нам нужен файл с именем cms_menus.py в нашем приложении. Добавьте cms_menus.py в polls_cms_integration/:
fromdjango.urlsimportreversefromdjango.utils.translationimportgettext_lazyas_fromcms.menu_basesimportCMSAttachMenufrommenus.baseimportNavigationNodefrommenus.menu_poolimportmenu_poolfrompolls.modelsimportPollclassPollsMenu(CMSAttachMenu):name=_("Polls Menu")# give the menu a name this is required.defget_nodes(self,request):""" This method is used to build the menu tree. """nodes=[]forpollinPoll.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)returnnodesmenu_pool.register_menu(PollsMenu)
Что здесь происходит:
мы определяем класс PollsMenu и регистрируем его
присваиваем классу атрибут name (будет отображаться в админке)
в его методе get_nodes(), мы строим и возвращаем список узлов, где:
сначала мы получаем все объекты Poll
… и затем создать объект NavigationNode из каждого из них.
… и вернуть список этих NavigationNodes.
Этот класс меню не будет ничего делать, пока не будет прикреплен к странице. В Дополнительных настройках страницы, к которой вы ранее прикрепили apphook, выберите «Меню опросов» из списка Прикрепленное меню и сохраните еще раз. (Вы можете добавить меню на любую страницу, но логичнее всего добавить его на эту страницу).
Вы можете заставить меню автоматически добавляться на страницу с помощью apphook, если считаете это целесообразным. См. Добавление меню в apphooks для получения информации о том, как это сделать.
Примечание
Смысл здесь в том, чтобы проиллюстрировать основные принципы. В этом реальном случае обратите внимание на то, что:
Если вы собираетесь использовать вложенные страницы, вам нужно будет улучшить стиль меню, чтобы оно работало немного лучше.
Поскольку на странице «Опросы» все равно перечислены все опросы, это не самое практичное дополнение к меню.