standard detail - pai-plznw4me/django-initializer GitHub Wiki

표준 Detail Page 가이드

What?

  • 표준 상세 페이지는 Target 모델 record 정보를 하나의 페이지에서 보는 것 입니다.
  • 표준 detail page 는 standard_detail() 을 통해 생성된 코드 및 HTML 을 의미한다.
def standard_detail(request, id, model, callback, **cabllback_kwargs):
    """
    표준 디테일 뷰 함수입니다. GET 요청 시 모델 인스턴스의 세부 정보를 보여줍니다.

    :param request: HttpRequest 객체
    :param id: 모델 인스턴스의 식별자
    :param model: Django 모델 클래스
    :param callback: 선택적인 콜백 함수 (함수 또는 메서드)
    :param callback_kwargs: 콜백 함수에 전달할 추가 키워드 인자들
    :return: HttpResponse 객체
    """
    instance = model.objects.get(id=id)
    added_contents = []
    if request.method == 'GET':
        # 표준 디테일: 프로젝트
        detail_content = detail_html(request, instance)
        added_contents.append(detail_content)
        # 콜백 함수 호출
        if callback:
            callback(request=request, id=id, model=model, instance=instance,
                     detail_content=detail_content, added_contents=added_contents,
                     **cabllback_kwargs)

        # HTML 반환
        ret_html = add_content(request, 'doctris', *added_contents)
        return HttpResponse(ret_html)

    elif request.method == 'POST':
        raise NotImplementedError
    else:
        raise NotImplementedError

How to use?

def detail(request, id):
    """
    프로젝트 상세 정보를 보여주는 뷰 함수입니다.

    :param request: HttpRequest 객체
    :param id: 프로젝트의 식별자
    :return: HttpResponse 객체
    """
    def _callback(**kwargs):
        # Detail cabllback function 기본 인자.
        base_url = get_base_url(kwargs['request'].build_absolute_uri())
        inst = kwargs['instance']
        detail_content = kwargs['detail_content']
        added_contents = kwargs['added_contents']  # added_contents is list, list is mutable!

        # CRUD 테이블을 생성헙니다.
        crud_projectfile_table = filtered_crud_table(base_url, ProjectFile, 'project/projectfile', project=inst)

        # 프로젝트 상세 설명 및 제목 추가
        project_title = h_tag(2, '프로젝트 상세') # h2 tag 제목
        added_contents[0] = project_title + card_row((detail_content, 12))  # added_contents 내 첫번째 요소 : detail_content

        # 프로젝트 산출물 상세 설명 및 제목 추가
        projectfile_title = h_tag(2, '프로젝트 산출물 상세')  # h2 tag 제목
        added_contents.append( projectfile_title+card_row((crud_projectfile_table, 12)))

    return standard_detail(request, id, Project, _callback)
  1. standard_detail(request, id, Project, _callback) 을 생성합니다.
  2. 필요시 _callback funciton 을 정의해 사용합니다. 위 예제에서는 자식 모델 목록을 add_contents 에 추가 하는 예제 입니다.

스크린샷 2024-01-26 오후 2 56 56