2012-06-08 2 views
5

장고 템플릿 시스템이 매우 이상하게 동작했습니다. 더 마무리 조건이 없기 때문에, 물론Django의 조건부 태그 포함

{% include "test.html" %} 

는 이러한 템플릿을 렌더링 할 기회가 없습니다 : 나는 자신을 재귀 적으로 포함하는 템플릿 파일, 즉 test.html을 보유하고 있습니다. OK, 이제 다음을 시도하자 : test_false이 템플릿에 전달하고 False에 해당하는 변수입니다

{% if test_false %}{% include "test.html" %}{% endif %}, 

.

하나는 그냥 아무것도 포함되지 않습니다 것으로 예상하지만,하지 :

RuntimeError at /test/ 
maximum recursion depth exceeded while calling a Python object 

나는 그것을 얻지 않는다. Include 태그는 현재 컨텍스트에서 인수를 취할 수 있으므로 페이지의 다른 부분보다 먼저 실행됩니다. 그러면 조건 태그를 무시하는 이유는 무엇입니까?

답변

6

Django는 컴파일시 상수에 의해 주어진 템플릿을 포함하는 최적화 기능을 제공합니다.

설정 변수에 템플릿의 이름과 그 방법에 포함 :

{% include test_template %} 

장고가 최적화 그리고 당신의 코드가 작동해야 사용할 수 없습니다.

{% include "test.html" %} 

하지만 오히려에서 템플릿 경로를 넣어하지 않았을 :과 같이 -

-1

처럼 Thomasz 경로가 포함 템플릿 상수 문자열로 정의하면 장고 만이 최적화를 할 수 있습니다 말한다 파이썬 코드의 문맥.

{% with "test.html" as path %} 
    {% include path %} 
{% endwith %} 
: - 그래서 여기

이 같은 결과를 달성하는 약간 더 아파트형 방법입니다이 with에 포함 포장