2010-08-11 3 views
8

Django의 템플릿 시스템에서 if 문을 사용하여 선택적으로 만들고 싶은 블록이 있다면 어떻게해야합니까?Django 템플릿에서 블록을 선택적으로 만들 수있는 방법이 있습니까?

{% if val %}{% block title %}Archive {{ foo }}{% endblock %}{% endif %} 

을하지만 그것은 작동하지 않습니다

나는이 시도되었다. 주어진 값 (이 경우 Null)에 대해 블록이 발행되지 않고 기본 템플릿이 원래 값을 사용하도록 그렇게 할 수있는 방법이 있습니까?

편집 : 좀 더 구체적으로 대답하면 대답하기가 쉽습니다.

페이지 당 10 개의 항목이있는 페이지가 있습니다. 사용자는 다음 페이지로 이동하여 다음 10 개의 항목을 볼 수 있습니다. 첫 페이지를 지나갈 때마다 "Archive 1"또는 "Archive 10"과 같은 제목 태그를 사용하고 싶지만 원래 페이지로 돌아 가면 더 이상 아카이브가 아니어야합니다. 기본 템플릿에 이미 지정된 원래 사이트 제목으로 이동하십시오.

+0

귀하의 질문에 대한 답변을 모르겠지만 '기본'필터에 대해 알고 계십니까 - 원하는대로 할 수 있습니까? http://docs.djangoproject.com/en/dev/ref/templates/builtins/#default –

+0

고마워요 도미니크, 저도 그런 걸 찾고 있는데 디폴트를 할당 할 방법이 없어요. 블록 주위에 if 문을 넣을 수 있는지 알아 내려고합니까? – Vernon

답변

8

내가 이해하는 한 block은 자식 템플릿에서 "재정의"될 자리 표시 자입니다. 그것들은 "컴파일 타임"에 정의되어야하며 "런타임에"정의되어서는 안됩니다.

페이지 번호를 기준으로 제목을 수정하지 않는 이유는 무엇입니까 (페이지 매김을 사용한다고 가정). 다음과 같은 것 :

{% block title %} 
    {% ifequal page 1 %}Current{% else %}Archive {{ page }}{% endifequal %} 
{% endblock %} 
15

내가 작업하고있는 프로젝트에서 비슷한 문제가 발생했습니다. 여기에 내가 사용하여 해결 방법은 {{block.super}} 부모 블록에서 기본값을 당겨 :

내 부모 템플릿이 포함되어 있습니다

{% block title %}Default Title{% endblock %} 

우리 아이 템플릿이 포함되어

{% block title %} 
    {% if new_title %}{{ new_title }}{% else %}{{ block.super }}{% endif %} 
{% endblock %} 

* 참고 : HTML 제목 태그에서 결과를 사용하려는 경우 {% spaceless %} {% endspaceless %}에 코드를 래핑 할 수 있습니다.

은 (요르단 라이터 조금 내 대답하기 전에 원래 질문의 의견에 동일한 솔루션을 게시 것 같습니다.) 나는 단지 가끔 장고 버전에 따라 위의 좋은 답변을 추가해야

+0

감사합니다. 처음부터 블록 안쪽에 if 문을 넣을 수 있다는 것을 알았습니다. 블록을 선택적으로 만들면 궁금해 할 것 같았습니다. – Vernon

+0

Brilliant! 이렇게하면 양식 값을 기반으로 블록을 설정/해제 할 수 있으므로 결과의 인쇄 가능한 버전을 가질 수 있습니다. – sage

+1

'{{block.super}}'님이 트릭을했습니다. – AliBZ

0

{{ block.super }}의 내용을 두 번 두었습니다. 가장 최신 버전의 장고에서 발생하는 것으로 보입니다.

내가 장고 1.8을 사용하고 그리고 난이 {{ block.super }}을 넣을 때마다 그냥 난 당신이

{% block title %} Default Title {% endblock %} 
을하고자하는 기본 템플릿에이 내용을 넣을 수 있다고 말할 수 제이미 답변에 추가로 그런 식으로 행동하기 시작

그리고 나서 바닥 글을 상속 받고 표시하려는 경우 아무 것도하지 마십시오. 원하지 않는하지만 그 블록은 표시 그냥이 같은 내용이 비어 있지 아동에 태그를 넣어합니다 : 그것은 또한 렌더링되면

{% block title %} 

{% endblock %} 
다음

가 숨겨집니다 당신이 그것의 내용 경우를 덮어 쓸 수 있습니다 네가 원한다.

관련 문제