템플릿 - 변수 (Variables)
1.
템플릿 변수는 템플릿에 전달된 '컨텍스트 딕셔너리 (context dictionary)'에 의해 정의 됨.
2.
애플리케이션에서 전달한 템플릿의 변수를 조작 가능.
변수에는 액세스할 수 있는 속성이나 요소가 있을 수 있음.
변수가 갖는 속성은 해당 변수를 제공하는 애플리케이션에 따라 크게 달라짐.
3.
표준 Python __getitem__ “하위 첨자” 구문([] ) 외에도 점(. )을 사용하여 변수의 속성에 접근 가능. (예)
{{ foo.bar }}
{{ foo['bar'] }}
PS. 주의사항
바깥쪽 이중 중괄호({{ .. }} )는 변수의 일부가 아니라 print 문의 일부 라는 점을 아는 것이 중요.
태그 안의 변수에 접근하는 경우 변수 주위에 중괄호를 넣으면 안 됨.
4.
변수나 속성이 존재하지 않으면 정의되지 않은 값이 반환 되는데, 이러한 종류의 값으로 수행할 수 있는 작업은 애플리케이션 구성에 따라 다름. (기본 동작은 인쇄되거나 반복되는 경우 빈 문자열로 평가되고 다른 모든 작업에서는 실패 하는 것임.)
5. Jinja에서 (foo.bar / foo['bar'])의 실행(Implementation) 순서 차이
(1) foo.bar 경우, Python 계층 상 실행 순서
foo에서 bar라는 속성(attribute) 확인. (getattr(foo, 'bar'))
없으면 foo에서 "bar" 항목(item) 확인. (foo.__getitem__('bar'))
없으면 정의되지 않은 객체를 반환.
(2) foo['bar'] 경우, Python 계층 상 실행 순서
foo에서 'bar' 항목(item) 확인. (foo.__getitem__('bar'))
없으면 foo에서 bar라는 속성(attribute) 확인. (getattr(foo, 'bar'))
없으면 정의되지 않은 객체를 반환.
PS.
객체에 동명의 항목(item)과 속성(attribute) 존재 시, 실행순서 차이를 이해하는 건 매우 중요 .
attr() 필터는 속성(attribute)만 조회함.
주소 복사
랜덤 이동