I have an OrderedDict
in my Django application which let to get content edition
and content subversions
for each edition.
It looks like this:
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()])
I get:
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')]
)
]
)
This OrderedDict lets me to create tabs for navigation in navbar menu. It should be:
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
In my menu.py file, menu is created like this:
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)
So I'm trying to loop over OrderedDict in order to create my menu like the example before. I'm getting some difficulties to isolate each menu and add submenus for each menu associated:
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))
It gives me:
It's the same thing for 9th Edition
. For 10th Edition
, I should have only Ph. Eur. 10.x
and for 9th Edition
, I should have only Ph. Eur. 9.x
Thank you very much by advance
You are building a list of all sub-versions and then add that list to all editions.
Re-arrange your loop like this:
for version in od:
edition_children = ()
for element in od[version]:
edition_children += MenuItem(element[1], reverse('home'), weight=150, separator=False),
Menu.add_item('edition', MenuItem(version[1], '#', children=edition_children))