Динамическое меню Django в панели навигации

#python #django #recursion #bootstrap-4 #drop-down-menu

#python #django #рекурсия #bootstrap-4 #выпадающее меню

Вопрос:

Я хочу создать динамическое меню, это означает, что меню загружается из таблицы

Вот настройка меню в моей панели администратора django

Список меню из моей таблицы

и вот как я создаю или настраиваю меню

Добавить дочернее меню

И это текущий результат

Это текущее условие

 def process_request(self, request):
    html_menu = ''
    menus = menu.Menu.objects.order_by('order_number').all()

    used_ids = []
    for m in menus:
        print(">>>>>> " , m, m.children_menu.all())
        if m.target_url == '' or m.target_url is None or m.target_url == '#':
            menu_link = '#'
        else:
            menu_link = reverse(m.target_url)

        children = m.children_menu.all()
        if len(children) > 0:
            children_ids, children_html_menu = self.recursive_menu(m, children)
            html_menu  = children_html_menu
            used_ids  = children_ids
        elif m.is_divider:
            html_menu  = f'''
              <hr class="sidebar-divider">
              <div class="sidebar-heading">
                  {m.title}
              </div>
            '''
        elif m.id not in used_ids:
            html_menu  = f'''
                <li class="nav-item active">
                    <a class="nav-link" href="{menu_link}">
                      <i class="{m.icon_class}"></i>
                      <span>{m.title}</span>
                    </a>
                </li>
            '''

        used_ids.append(m.id)

    print(html_menu)
    request.menus = html_menu

def recursive_menu(self, m, children):
    print("test " , m, children)
    children_ids = []
    html_menu = f'''
      <li class="nav-item">
        <a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapse{m.order_number}"
          aria-expanded="true" aria-controls="collapse{m.order_number}">
          <i class="{m.icon_class}"></i>
          <span>{m.title}</span>
        </a>
        <div id="collapse{m.order_number}" class="collapse" aria-labelledby="headingUtilities" data-parent="#accordionSidebar">
          <div class="bg-white py-2 collapse-inner rounded">            
    '''

    if len(children) < 1:
        return children_ids, html_menu
    else:
        for c in children:
            # print(c, ">>>>>>>>>..", c.children_menu)
            children_ids.append(c.id)
            if c.target_url == '' or c.target_url is None or c.target_url == '#':
                menu_link = '#'
            else:
                menu_link = reverse(c.target_url)

            if len(c.children_menu.all()) > 0:
                child_ids, children_html_menu = self.recursive_menu(c, c.children_menu.all())
                html_menu  = children_html_menu
                children_ids  = child_ids
            else:
                html_menu  = f'''
                    <a class="collapse-item" href="{menu_link}">
                    <i class="{c.icon_class}"></i>
                    <span>{c.title}</span>
                    </a>
                '''

        html_menu  = '''
                    </div>
                </div>
            </li>
        '''

    return children_ids, html_menu
 

Я хочу создать не только что-
то: A, B

но способный обрабатывать что-то: A: A1, A2, B, C: C1, …. C7 и так далее

Я действительно ценю любую помощь, большое вам спасибо

Я открываю, чтобы изменить концепцию меню (схему / отношение), а также о существующем коде, который я знаю, есть что-то, что я могу улучшить, мне нужно ваше предложение.