2009-05-11 10 views
3

현재 장고 템플릿에 문제가 있습니다. 나는 기본적으로 3 개 템플릿 파일이 있습니다django 템플릿에 포함

  • 자료
  • story_list
  • story_detail

Story_list을하고 자료를 확장 _detail, 그것은 완벽하게 작동합니다. 그러나 목록 및 세부 정보는 내 사이드 ​​바의 기본 템플릿을 확장하는 일부 코드를 공유합니다. 나는 기본적으로 두 템플릿 모두에서 코드 덩어리를 반복하고 있으며, 내 프로그래머는 그것이 잘못되었다고 말합니다. 더 좋은 방법이 있어야합니다. 나는 확신합니다. 나는 포함했지만, 포함 된 파일에 포함되어 있습니다 :

{% block item %} 
    content stuff 
{% endblock %} 

약 3 블록. 문제는 그 중 아무 것도 선택/렌더링되지 않는다는 것입니다. 기본 파일을 확장하는 블록 섹션에 파일을 포함 시키면 모든 파일이 제대로 덤프되지만 블록에 파일을 포함하지 않으면 아무것도 얻지 못합니다. SSI는 갈 길입니까? 나는 그걸 가지고 노려 보았지만 제대로 작동하지는 않았다. 어떤 도움을 주셔서 감사합니다.

+0

나는 혼란 스럽다. 사이드 바를 기본 자체에 두지 않는 이유는 무엇입니까? –

답변

16

일반적으로 include을 사용하는 것은 장고 템플릿에 대한 대답이 아닙니다. 여러면에서 당신의 질문에 답해 드리겠습니다.

먼저, 사이드 바에 대해 설명하겠습니다.

  • 거의 모든 공용 페이지가 사이드 바를 사용합니까?Base에 넣으십시오. 해당 사이드 바 블록을 재정의하지 마십시오 (예 : Story_* 템플릿에서 전혀 쓰지 않음).

  • 이 사이드 바는 Story_* 템플릿과 고유합니까? 다른 템플릿 (예 : Story_base)을 만들고 그 템플릿을 확장합니다. 이것은 Java로 추상 수퍼 클래스를 만드는 것과 유사합니다. (답변 내 머리에,하지만 표현은 jpwatts에서 무자비하게 ripped off이었다.)

다음 날 템플릿 상속을 해결 할 수 있습니다. Story_list이라는 이름의 템플릿이 Base까지 확장되어 있다고 가정 해 보겠습니다. 이 시점에서 {% extends "Base" %}을 입력 한 후 Story_list은 정확히Base입니다. 템플릿이 이미 완료되었으므로 Story_list에 입력 한 내용은 무시됩니다. 지금 할 수있는 유일한 일은 블록 인 Base으로 정의 된 것입니다.

마지막으로 include을 처리하겠습니다. 항상 그들을 피하십시오. PHP와 같은 다른 템플릿 엔진은 include을 사용하는 것이 좋습니다. 그러나 이로 인해 장기적으로 관리하기 어려운 템플릿이 생길 수 있습니다. 포함 된 스 니펫을 한눈에 파악하고 템플릿 계층에서 해당 위치를 즉시 확인하는 것이 약간 어렵습니다.또한 템플릿 계층 구조로 리팩토링하거나 특히 여러 수준 (예 : Base, Story_base 두 번, Story_* 중 일부)에 리팩터링하는 것이 어렵습니다.

+0

사이드 바는 모든 페이지에 공통입니다. 나는 현재 그것들을 기지에두고 각각의 틀에서 그것을 확장한다. 하지만 확장은 각 하위 템플릿에서 똑같은 코드입니다. 그게 내가 피하려고하는거야. 이러한 특정 템플릿을 렌더링해야 할 때 할 수 있습니까? 기본적으로 사이드 바에는 완료하기 위해 특정 변수가 필요합니다. 그것이 내가 이해하지 못하는 부분입니다. 설명과 시간을 가져 주셔서 감사합니다. – f4nt

+1

하위 템플릿 Story_ *를 렌더링 할 때 Base의 사본을 만들고 블록의 모든 내용을 Story_ *에 정의 된 블록으로 바꾸고 변수의 값을 채우는 것이라고 가정 해 보겠습니다. Base에 {{my_page_name}} 변수가있는 사이드 바가 있고 my_page_name = "STORY_LIST"로 Story_list를 렌더링하면 사이드 바에 "STORY_LIST"가 표시됩니다. – Wesley

+0

나는 바보처럼 느껴져..하지만 고마워! :) – f4nt

6

사이트 전체에 필요하지 않은 스토리 템플릿간에 공통 코드가있는 경우 story_base (원래 base 확장)을 만들고 스토리 템플릿을 확장해야합니다.

0

이 경우 {% include %} 태그가 있습니다.

+0

그래, 위에 지적한대로, 나는 그것이 어떻게 계획된 것인지 작동하지 않는다. – f4nt

+1

"기본 파일을 확장하는 블록 섹션에 파일을 포함하면 모든 파일이 제대로 덤프됩니다."작동하는 것처럼 들립니다. 내가 뭘 놓치고 있니? –

0
{% include xxx.html %} 

이 태그가 작동합니다.

또 다른 방법은 필터를 사용하는 것입니다. 필터는 렌더링을위한 함수를 호출하고 렌더링 중에 템플릿을 사용할 수 있습니다.

관련 문제