본문 바로가기
profile_image

Gnuboard6

base.html 의 menus 는 어디서 가져오는 객체?

페이지 정보

작성자 이노힐
댓글 0건 조회 6회
작성일 2025-04-08 05:02:35

본문

/home/innobuno/dev/g6/templates/trend2025/bbs/menu.html

검색 결과를 분석해보니, menus 객체는 다음과 같은 경로로 설정됩니다:
  1. lib/dependency/dependencies.py의 set_template_basic_data 함수에서 request.state.template_data에 메뉴 데이터를 설정합니다:

    python

    Apply to menu.html

    template_data = {

        "current_login_count": current_connect_service.fetch_total_records(),

        "menus": menu_service.fetch_menus(),

        "poll": poll_service.fetch_latest_poll(),

        "populars": popular_service.fetch_populars(),

    }

    request.state.template_data = template_data

  1. 실제 메뉴 데이터는 service/menu_service.py의 MenuService 클래스의 fetch_menus 메서드에서 데이터베이스에서 조회됩니다:

    python

    Apply to menu.html

    @cached(LRUCache(maxsize=128), key=lambda _: hashkey("menus"))

    def fetch_menus(self) -> List[Menu]:

        menus = []

        # 부모메뉴 조회

        parent_menus = self.db.scalars(

            select(Menu)

            .where(func.char_length(Menu.me_code) == 2)

            .order_by(Menu.me_order)

        ).all()

        for menu in parent_menus:

            parent_code = menu.me_code

            # 자식 메뉴 조회

            child_menus = self.db.scalars(

                select(Menu).where(

                    func.char_length(Menu.me_code) == 4,

                    func.substr(Menu.me_code, 1, 2) == parent_code

                ).order_by(Menu.me_order)

            ).all()

            menu.sub = child_menus

            menus.append(menu)

        return menus

따라서 menus는 다음과 같은 특징을 가진 객체입니다:
  1. 데이터베이스의 Menu 테이블에서 조회됩니다
  1. 캐시되어 성능을 최적화합니다 (LRUCache 사용)
  1. 부모 메뉴(me_code 길이가 2)와 자식 메뉴(me_code 길이가 4)로 구성됩니다
  1. 각 부모 메뉴는 sub 속성에 자식 메뉴들을 포함합니다
  1. 메뉴는 me_order 순서대로 정렬됩니다
이 메뉴 데이터는 템플릿에서 request.state.template_data.menus로 접근할 수 있습니다.

댓글목록

등록된 댓글이 없습니다.

댓글쓰기

내용

방문자 집계

  • 오늘 15
  • 어제 630
  • 최대 849
  • 전체 30,812

Copyright © innohealonline.com. All rights reserved.