У меня есть OrderedDict
в моем приложении Django, которое позволяет получать content edition
и content subversions
для каждого издания.
Это выглядит так:
from collections import OrderedDict
od = OrderedDict()
for version in list_of_edition():
od.setdefault((version.pk, version.title), []).extend([(subversion.pk, subversion.title) for subversion in version.collection.all()])
Я получаю:
OrderedDict([((2, '10th Edition (Current)'), [(58464, 'Ph. Eur. 10.0 lite')]), ((1, '9th Edition'), [(21928, 'Ph. Eur. 9.8 lite'), (29235, 'Ph. Eur. 9.9 lite'), (36542, 'Ph. Eur. 9.10 lite')])])
# Rewritten in order to get more readable
OrderedDict(
[
(
(2, '10th Edition (Current)', True), [(58464, 'Ph. Eur. 10.0 lite')]
),
(
(1, '9th Edition', True), [(21928, 'Ph. Eur. 9.8 lite'), (29235, 'Ph. Eur. 9.9 lite'), (36542, 'Ph. Eur. 9.10 lite')]
)
]
)
Этот OrderedDict позволяет мне создавать вкладки для навигации в меню панели навигации.
Должно быть:
Tab : 10th Edition (Current)
|
---> subtab : Ph. Eur. 10.0 lite
Tab : 9th Edition
|
---> subtab : Ph. Eur. 9.8 lite
|
---> subtab : Ph. Eur. 9.9 lite
|
---> subtab : Ph. Eur. 9.10 lite
В моем файле menu.py меню создается следующим образом:
content_children = (
AdminMenuItem(_('Manage smth1'), reverse('smth1-list'), weight=100, separator=False),
AdminMenuItem(_('Manage smth2'), reverse('smth2-list'), weight=100, separator=False),
...
)
Menu.add_item('content', MenuItem(_('Content'), '#content', children=content_children)
Так что я пытаюсь перебрать OrderedDict, чтобы создать свое меню, как в предыдущем примере. У меня возникают трудности с выделением каждого меню и добавлением подменю для каждого связанного меню:
edition_children = ()
for version in od:
for element in od[version]:
edition_children += MenuItem(element[1], reverse('home'), weight=150, separator=False),
for version in od:
Menu.add_item('edition', MenuItem(version[1], '#', children=edition_children))
Это дает мне:
Это то же самое для 9th Edition
. Для 10th Edition
у меня должно быть только Ph. Eur. 10.x
, а для 9th Edition
у меня должно быть только Ph. Eur. 9.x
Большое спасибо заранее