def block_top_navmenu(self, context, nodes): themes = [{'name': _(u"Default"), 'description': _( u"Default bootstrap theme"), 'css': self.default_theme}, {'name': _(u"Bootstrap2"), 'description': _(u"Bootstrap 2.x theme"), 'css': self.bootstrap2_theme}] select_css = context.get('site_theme', self.default_theme) if self.user_themes: themes.extend(self.user_themes) if self.use_bootswatch: ex_themes = cache.get(THEME_CACHE_KEY) if ex_themes: themes.extend(json.loads(ex_themes)) else: ex_themes = [] try: watch_themes = json.loads(urllib.urlopen( 'http://api.bootswatch.com/3/').read())['themes'] ex_themes.extend([ {'name': t['name'], 'description': t['description'], 'css': t['cssMin'], 'thumbnail': t['thumbnail']} for t in watch_themes]) except Exception: pass cache.set(THEME_CACHE_KEY, json.dumps(ex_themes), 24 * 3600) themes.extend(ex_themes) nodes.append(loader.render_to_string('nadmin/blocks/comm.top.theme.html', {'themes': themes, 'select_css': select_css}))
def get_context(self): context = super(CommAdminView, self).get_context() if not settings.DEBUG and 'nav_menu' in self.request.session: nav_menu = json.loads(self.request.session['nav_menu']) else: menus = copy.copy(self.get_nav_menu()) def check_menu_permission(item): need_perm = item.pop('perm', None) if need_perm is None: return True elif callable(need_perm): return need_perm(self.user) elif need_perm == 'super': return self.user.is_superuser else: return self.user.has_perm(need_perm) def filter_item(item): if 'menus' in item: before_filter_length = len(item['menus']) item['menus'] = [filter_item( i) for i in item['menus'] if check_menu_permission(i)] after_filter_length = len(item['menus']) if after_filter_length == 0 and before_filter_length > 0: return None return item nav_menu = [filter_item(item) for item in menus if check_menu_permission(item)] nav_menu = filter(lambda x:x, nav_menu) if not settings.DEBUG: self.request.session['nav_menu'] = json.dumps(nav_menu) self.request.session.modified = True def check_selected(menu, path): selected = False if 'url' in menu: chop_index = menu['url'].find('?') if chop_index == -1: selected = path.startswith(menu['url']) else: selected = path.startswith(menu['url'][:chop_index]) if 'menus' in menu: for m in menu['menus']: _s = check_selected(m, path) if _s: selected = True if selected: menu['selected'] = True return selected for menu in nav_menu: check_selected(menu, self.request.path) context.update({ 'menu_template': self.menu_template, 'nav_menu': nav_menu, 'site_title': self.site_title or _(u'Django Xadmin'), 'site_footer': self.site_footer or _(u'my-company.inc'), 'breadcrumbs': self.get_breadcrumb() }) return context