Говнокод, можете пинать, только небольно
class Menu(object):
fields=((),()) # ((name, url_name), (name_1, url_name_1))
params={} # {'territory_id':'territory.id', 'child_id':'child.id' }
sumbenus={} # sumbenu={1:Submenu1Class, 4:Submenu2Class}
is_vertical=False # nothing or 'vertical_menu'
is_fixed=True
@classmethod
def get_menu_type(cls):
return 'vertical_menu' if cls.is_vertical else ''
@classmethod
def get_block(cls):
return 'sidebar' if cls.is_vertical else "menu"
row_template='<li %s><a href="{%% url %s %s %%}?menu_entry=%s">%s</a></li>'
@classmethod
def get_template(cls):
template=u'{%% block '+ cls.get_block() +u'%%} \
<ul class="nav '+cls.get_menu_type()+u'" style="border-style: solid; border-width: 1px; border-color: #FFF; border-radius: 2px; margin:2px"> %s </ul> \
{%% endblock %%}'
return template
@classmethod
def get_params_str(cls):
return ' '.join(['%s=%s' % (k,v) for k,v in cls.params.iteritems()])
@classmethod
def get_html(cls,*args, **kwargs):
fields_dict=dict([(v,k) for k,v in enumerate([x[0] for x in cls.fields]) ])
c=count(1)
index=int(_thread_locals.request.GET.get('menu_entry', 0))
res=[]
for name, url in cls.fields:
if not fields_dict[name] in cls.sumbenus:
menu_entry=c.next()
if menu_entry==index and cls.is_fixed:
cl='class="active"'
else:
cl=''
res.append(cls.row_template % (cl, url, cls.get_params_str(), menu_entry, name ))
else:
c.next()
res.append(sub_menu(cls.sumbenus[fields_dict[name]], name))
return cls.get_template() % ''.join(res)
def sub_menu(sub_menu_class, name):
class SubMenuInstance(Menu):
fields=sub_menu_class.fields
params=sub_menu_class.params
@classmethod
def get_template(cls):
template='<li class="dropdown" data-dropdown="dropdown"><a href="#" class="dropdown-toggle">' +name+ '</a> \
<ul class="dropdown-menu"> %s </ul></li>'
return template
return SubMenuInstance.get_html()
class MainInSub(Menu):
fields=(
(u'Основная очередь', 'sitizens_in_turn'),
(u'Льготная очередь', 'sitizens_in_turn'),
)
params={'territory_id':'territory.id'}
class MainOffSub(Menu):
fields=(
(u'Основная очередь', 'sitizens_off_turn'),
(u'Льготная очередь', 'sitizens_off_turn'),
)
params={'territory_id':'territory.id'}
class MainAddSub(Menu):
fields=(
(u'Новый гражданин', 'sitizens_add'),
(u'Гражданин из БД', 'sitizens_rbdds_add'),
)
params={'territory_id':'territory.id'}
class MainMenu(Menu):
fields=(
(u'Добавить', 'sitizens_add'),
(u'Граждане в очереди', 'sitizens_in_turn'),
(u'Граждане снятые с очереди', 'sitizens_off_turn'),
(u'Граждане получившие жилье', 'sitizens_with_home'),
)
params={'territory_id':'territory.id'}
is_fixed = False
sumbenus={
0:MainAddSub,
1:MainInSub,
2:MainOffSub,
} # sumbenu={0:Submenu1Class, 4:Submenu2Class}
class StatisticsSidebar(Menu):
is_vertical = True
is_fixed = False
fields=(
(u'Поставлены на учет', 'report1'),
(u'Получили жильё(по категориям)', 'report2'),
(u'Нуждаются в жилье(по категориям)', 'report3'),
(u'Количество предоставленных помещений', 'report4'),
(u'Количество граждан ожидающих жильё', 'report5'),
(u'Количество граждан поставленных на учет в течении года (по категориям)', 'report6'),
)
params={'territory_id':'territory.id'}
def get_all_menuses():
print MainMenu.get_html()
print StatisticsSidebar.get_html()
-extends 'templates/base.html'
-block title
Список граждан
-block description
Список граждан
-block content
{% include "templates/alphabet.html" %}
-block list
{% include "templates/pager.html" %}
:python
get_all_menuses()