장고 템플릿을 사용하여 트리 구조 (재귀)를 렌더링하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/32044

  •  09-06-2019
  •  | 
  •  

문제

장고 템플릿을 사용하여 HTML로 렌더링하고 싶은 트리 구조가 메모리에 있습니다. 라코 디스

root 인 object Node가 있으며 childrenNode의 목록입니다.root는 템플릿의 콘텐츠로 전달됩니다.

하나의 토론을 찾았습니다.그러나 포스터는 이것이 생산 환경에서는 좋지 않을 수 있다고 제안합니다.

더 나은 방법을 아는 사람이 있습니까?

도움이 되었습니까?

해결책

정상적인 대답은 "하지 마세요"라고 생각합니다.

대신에해야 할 일은 보기 코드에서 일을 푸는 것이므로 템플릿에서 (| de) 반복하는 문제 일뿐입니다.트리를 반복하면서 목록에 들여 쓰기와내어 쓰기를 추가 한 다음 해당 "여행"목록을 템플릿에 보내는 방식으로 할 수있을 것 같습니다.(그런 다음 템플릿은 해당 목록에서 <li></li>를 삽입하여 "이해"하는 재귀 구조를 만듭니다.)

또한 템플릿 파일을 재귀 적으로 포함하는 것이 정말 잘못된 방법이라고 확신합니다 ...

다른 팁

with 템플릿 태그를 사용하여 트리 / 재귀 목록을 작성할 수 있습니다.

샘플 코드 :

기본 템플릿 : 'all_root_elems'가 하나 이상의 트리 루트 목록이라고 가정합니다. 라코 디스

tree_view_template.html은 중첩 된 ul, li를 렌더링하고 아래와 같이 node 템플릿 변수를 사용합니다. 라코 디스

이것은 필요한 것보다 더 많을 수 있지만 'mptt'라는 django 모듈이 있습니다. 이것은 SQL 데이터베이스에 계층 적 트리 구조를 저장하고 뷰 코드에 표시 할 템플릿을 포함합니다.유용한 정보를 찾을 수있을 것입니다.

링크 : django-mptt

너무 늦었 어) 여러분 모두 불필요한 태그를 너무 많이 사용하고 있습니다. 이것이 제가 리큐 시브를 수행하는 방법입니다.

기본 템플릿 : 라코 디스

그런 다음 menu.html에서 : 라코 디스

예, 할 수 있습니다.약간의 속임수입니다. 파일 이름을 변수로 {% include %}에 전달 : 라코 디스

Django에는 다음과 같은 정확한 시나리오를위한 템플릿 도우미가 내장되어 있습니다.

https://docs.djangoproject.com/ko / dev / ref / templates / builtins / # unordered-list

같은 문제가 있었고 템플릿 태그를 작성했습니다.이와 같은 다른 태그가 있다는 것을 알고 있지만 어쨌든 사용자 정의 태그를 만드는 법을 배워야했습니다. :) 꽤 잘 나온 것 같습니다.

사용 안내는 독 스트링을 읽어보세요.

github.com/skid/django-recurse

아무도 dicts를 좋아하지 않습니까?여기에 뭔가 빠졌을 수도 있지만 메뉴를 설정하는 가장 자연스러운 방법 인 것 같습니다.키를 항목으로 사용하고 값을 링크로 사용하면 DIV / NAV에 표시되고 이동합니다!

기지에서 라코 디스

전화 해 라코 디스

기본 또는 주문을 시도하지 않았을 수도 있습니다.

수정 :

root_comment.html 라코 디스

tree_comment.html 라코 디스

예 : 모델 : 라코 디스

비슷한 문제가 있었지만 먼저 JavaScript를 사용하여 솔루션을 구현 한 후 곧장 고 템플릿에서 동일한 작업을 수행 할 방법을 고려했습니다.

serializer 유틸리티를 사용하여 모델 목록을 json으로 전환하고 json 데이터를 계층 구조의 기반으로 사용했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top