2012-08-23 2 views
25

django 템플릿의 if 조건 내에서 블록을 호출하려고했습니다.if 조건 내에서 블록 호출 : django template

나는 base template입니다. 기본 템플릿을 확장하는 많은 다른 템플릿이 있습니다. 나는 기본 템플릿에 블록을 정의 :

{% block test_block %}Test{% endblock %} 

난 다음 다른 템플릿에서 특정 조건에이 블록을 재정의합니다. 조건이 실패하면 블록을 무시해서는 안됩니다. 이것은 내가 쓴 것입니다 :

{% if test_value %}{% block test_block %}Development{% endblock %}{% endif %} 

이것은 실제로 (또는 사실상) if 조건을 무시합니다.

마침내 무슨 짓을 :

{% block test_block %}{% if test_value %}Development{% else %}{{ block.super }}{% endif %}{% endblock %} 

나는 모든 곳이 필요했다 이런 식으로 뭔가를해야했다.

가장 좋은 방법입니까? 이것이 유일한 방법입니까? 왜 내 첫 번째 방법을 시도 할 수 없습니까? 또는 내 편이 어떤 실수가 있습니까?

+0

당신의 장고 버전은 무엇입니까? –

+0

도 참조하십시오 http://stackoverflow.com/questions/942797/why-cant-i-nest-a-block-tag-inside-an-if-tag – Bryce

+0

고마워요. 내 머리를 몇 시간 동안 두들겨 봤어요. – pmont

답변

13

실수를하지 않았습니다. 주위의 조건에 관계없이 템플릿 블록이 포함되어 있습니다. {% extends %}가 렌더링되는

self.blocks = dict([(n.name, n) for n in nodelist.get_nodes_by_type(BlockNode)]) 

, 그것은 부모가 건너 올 때 렌더링을 위해 모든 블록 직접 템플릿 노드에 저장을 가져옵니다 : 당신은 Django source codedjango/template/loader_tags.pyExtendsNode 클래스의이 라인에서 이것을 볼 수 있습니다 그 사람 block들. 자녀의 블록이 조건부인지 여부는 고려되지 않습니다.

+0

이 문제를 해결할 수있는 방법이 있습니까? – jsmedmar