In a view site/menu.html I have the following code to generate a menu with 
drop down menus.

<div class="nav-collapse">
  <ul class="nav">
    {{for _name,_active,_link in session.site_menu:}}
      {{if session['%sDropdown' % _name]:}}
        <li class="dropdown" {{if _active:}} class="active" {{pass}}>
          <a href="" class="dropdown-toggle" 
data-toggle="dropdown">{{=_name}}
          <b class="caret"></b></a>
          <ul class="dropdown-menu">
          {{for _name,_active,_link in session['%sDropdown' % _name]:}}
            <li {{if _active:}} class="active" {{pass}}>
              <a href="{{=_link}}">{{=_name}}</a>
            </li>
          {{pass}}
          <ul>
        </li>
      {{else:}}
        <li {{if _active:}} class="active" {{pass}}>
          <a href="{{=_link}}">{{=_name}}</a>
        </li>
      {{pass}}
    {{pass}}
  </ul>
</div><!--/.nav-collapse -->


Whether or not a menu item has a drop down menu depends on database queries 
stored in session:

session.site_menu=[
    ['Home',request.controller=='site' and 
request.function=='index',URL('site','index',args=session.id)]]
    if session.whq:
        
session.site_menu.append(['Whq',request.controller=='whq',URL('whq','index',args=session.id)])
        session.WhqDropdown=[]
        if session.whq.who_we_are:
            session.WhqDropdown.append(['Wie we 
zijn',request.function=='whoWeAre',\
            URL('whq','whoWeAre',args=session.id)])
        if session.whq.what_we_do:
            session.WhqDropdown.append(['Wat we 
doen',request.function=='whatWeDo',\
            URL('whq','whatWeDo',args=session.id)])
        if session.whq.how_we_work:
            session.WhqDropdown.append(['Hoe we 
werken',request.function=='howWeWork',\
            URL('whq','howWeWork',args=session.id)])
        if session.whq.where_we_are:
            session.WhqDropdown.append(['Waar we 
zitten',request.function=='whereWeAre',\
            URL('whq','whereWeAre',args=session.id)])
    if session.cal:
        
session.site_menu.append(['Agenda',request.controller=='calendar',URL('calendar','index',args=session.id)])
        session.AgendaDropdown=[]
        if session.cal.opening_hours:
            
session.AgendaDropdown.append(['Openingstijden',request.function=='openingHours',\
            URL('calendar','openingHours',args=session.id)])
        if session.cal.event_list:
            session.AgendaDropdown.append(['Event 
list',request.function=='eventList',\
            URL('calendar','eventList',args=session.id)])
        if session.cal.timetable:
            
session.AgendaDropdown.append(['Lesrooster',request.function=='timetable',\
            URL('calendar','timetable',args=session.id)])
        if session.cal.course_table:
            
session.AgendaDropdown.append(['Cursusrooster',request.function=='courseTable',\
            URL('calendar','courseTable',args=session.id)])
    return None

What the code in the view should generate is:

<ul class="nav">
  <li class="active">
    <a>Home</a>
  </li>
  <li class="dropdown">
    <a>Whq</a>
    <ul class="dropdown-menu"></ul>
  </li>
  <li class=""dropdown">
    <a>Agenda</a>
    <ul class="dropdown-menu"></ul>
  </li>
<ul>


What it does generate is:

<ul class="nav">
  <li class="active">
    <a>Home</a>
  </li>
  <li class="dropdown">
    <a>Whq</a>
    <ul class="dropdown-menu"></ul>
      <li></li>
      <li></li>
      <li></li>
      <li></li>
      <ul>  ## ul with no class name
        <li class="dropdown">
          <a>Agenda</a>
           <ul class="dropdown-menu></ul>
              <li></li>
              <li></li>
              <li></li>
              <li></li>
              <ul></ul> ## empty ul
        </li>
    </ul>
  </li>
</ul>

There's obviously something wrong with the logic in the view but I don't 
see what's wrong.

Annet.

Reply via email to