• 회원가입
  • 로그인
  • 구글아이디로 로그인

[template] Jinja - 템플릿 - 표현식 ★ (Template - Expressions) ※ (자료형/연산자/기호/키워드) 종류 ※ if표현식 (= 이프표현식)

목차
  1. 리터럴 (Literals)
  2. 수학 (Math)
  3. 비교 (Comparisons)
  4. 논리 (Logic)
  5. 그외 연산자 (Other Operators)
  6. if 표현식 (If Expression)
  7. 파이썬 메서드 (Python Methods)

 

리터럴 (Literals)

 

  • 변수에 의존 않는 고정된 데이터 값 그 자체를 의미.
  • (예) 문자열, 정수, 부동소수(=실수), 리스트, 튜플, 딕트, 불린 (= 참거짓)
  • 표현식 중 가장 간단한 형태에 해당.

 


문자열 (String)

 

  • (예) "홈장닷컴 Homzzang.com"
  • 큰따옴표(")나 작은따옴표(') 사이의 모든 것은 문자열에 해당.
  • 템플릿에서 문자열 필요 시 매우 유용. (예: ① calls나 filters 함수에 인수 전달. ② 템플릿을 extend (상속/확장)하거나 include (삽입)할 때)

 


정수 (integer)

 

  • (예) 42 / 123_456
  • 숫자 중 소수점 이하 부분을 제외한 부분에 해당.
  • 가독성 위해 언더바( _ ) 문자 사용해 그룹 구분 가능.

 


부동소수 (float) = 실수

  

  • (예) 42.23 / 42.1e2 / 123_456.789
  • 소수점(.)이 붙은 숫자 형태 의미.
  • 지수 경우, 대문자 또는 소문자 'e' 사용해 과학적 표기법으로 작성 가능.
  • 가독성 위해 언더바( _ ) 문자 사용해 그룹 구분 가능. (단, 지수 부분엔 사용 불가) 



리스트 (List)

 

  • (예) ['list', 'of', 'objects']
  • 대괄호([]) 안에 쉼표(,)로 구분 열거한 데이터 의미. (수정 가능 O)
  • List (리스트) 자료형 특징 보기
  • 반복할 순차적 데이터 저장 시 유용. 
  • (예) for 반복문에 List(리스트)와 Tuple(튜플) 사용하여 링크 목록 작성 가능.

 

<ul>

{% for href, caption in [('index.html', '대문'), ('about.html', '소개'),

                         ('downloads.html', '다운로드')] %}

    <li><a href="{{ href }}">{{ caption }}</a></li>

{% endfor %}

</ul>

 


튜플 (Tuple)

 

  • (예) ('tuple', 'of', 'values')
  • 소괄호(()) 안에 쉼표(,)로 구분 열거된 데이터 의미. (수정 가능 X)
  • 수정할 수 없는(= 불변) List 자료형과 같음.
  • Tuple (튜플) 자료형 특징 보기
  • 아이템이 하나뿐이면 뒤에 쉼표(,) 찍어야 함. (얘) ('1-tuple',)
  • 보통, 두 개 이상의 요소로 구성된 아이템 나타날 때 사용. 
  • 위 List (리스트) 예제 참고.

  


딕트 (Dict)

 

  • (예) {'dict': 'of', 'key': 'and', 'value': 'pairs'}
  • 중괄호({}) 안에 키(key):값(value) 쌍의 데이터가 쉼표(,)로 구분 열거된 자료형 의미.
  • dict (딕트=딕셔너리) 자료형 특징 보기
  • 키(key)는 고유해야 하며 항상 정확히 하나의 값(value)을 가져야 함.
  • 템플릿에서는 거의 사용 X. (※ xmlattr() 필터와 같은 드문 경우에만 유용함.)

 


불린 (Boolean) = 참거짓

 

 

PS.

  • 특수상수인 true, false, none은 소문자가 공식적인 형태임.
  • 단, True, False, None 경우, 혼란 유발 방지 위해 허용됨.
  • 따라서, true, false, none 같이 소문자로 적을 것을 권장함.

 

 

수학 (Math)

 

  • Jinja 사용하면 값 계산 가능함. 
  • 템플릿에서는 별로 쓸일 없지만, 완전성 위해 존재. 
  • 수학연산자 종류: ( +-/// , % , * , ** )

 


[수학연산자 종류]

 

  • + (더하기 연산자) - {{ 1 + 1 }}은 2이다.  숫자 경우엔 덧셈 연산하고, 둘 중 하나가 숫자 아니면 두 객체를 함께 추가함. 일반적으로 객체는 숫자이지만 둘 다 문자열이거나 List인 경우 이 방법으로 연결 가능함. 그러나, 문자열 연결 경우, 문자열연결연산자(~) 이용 권장.
  • / (나누기 연산자) - {{ 1 / 2 }}은 0.5이다. 반환값은 float 자료형임. 
  • // (몫 연산자) -  {{ 20 // 7 }}은 2이다. 나누기 후 몫 반환. 반환값은 int 자료형임.
  • % (나머지 연산자) -  {{ 11 % 7 }}은 4이다. 나누기 후 나머지 반환.
  • * (곱하기 연산자) - {{ 2 * 2 }}는 4이다. 문자열 반복에도 사용 가능. (예) {{ '=' * 80 }}은 80개의 등호 막대 인쇄.
  • ** (승수 연산자) - {{ 2**3 }}는 8이다. [주의] Python과 달리 연결된 pow는 왼쪽에서 오른쪽으로 평가됨. {{ 3**3**3 }}는 Jinja에서는 (3**3)**3으로 평가되지만 Python에서는 3**(3**3)으로 평가됨. 원하는 순서를 명시하려면 Jinja에서 소괄호를 사용. 일반적으로 템플릿에서 수행하는 것보다 Python에서 확장된 수학을 수행하고 결과를 렌더링에 전달하는 것이 더 좋음. 향후, Python과 일치하도록 동작 방식이 변경될 수도 있음.

 

 

비교 (Comparisons)

 

  • == (동등연산자/일치연산자) - 같다면 (= eq(), equalto() 테스트)
  • != (부동등연산자/불일치연산자) - 같지 않다면
  • > (초과연산자) - 더 크다면
  • >= (이상연산자) - 더 크거나 같다면
  • < (미만연산자) - 더 작다면
  • <= (이하연산자) - 더 작거나 같다면

 

 

논리 (Logic)

※ (if조건문, for 필터링, if 표현식)에서, 여러 표현식 결합할 때 유용.

 

  • and 키워드 - 그리고 (= 둘 다 참이면)
  • or 키워드 - 또는 (= 둘 중 하나라도 참이면)
  • not 키워드 - 부정 (= 아니면) [참고] ① "is" 및 "in" 연산자는 중위표기법(= 연산자를 피연산자들 사이에 배치해 표기) 사용해 not 표기도 지원. (예) "not foo is bar"와 "not foo in bar" 대신에, "foo is not bar"와 "foo not in bar" 사용 가능. ② 그외 다른 모든 표현식은 접두사표기법으로 표기. (예) "not (foo and bar)".
  • (expr) 기호 - 표현식을 그룹화.

 

 

그외 연산자 (Other Operators)

※ 동일 범쥐에선 매우 유용하나, 다른 두 범주에선 적합 X.

  • in 키워드 - ① (시퀀스/매핑) 포함 검사 수행. ② 왼쪽 것이 오른쪽 것에 포함 시 true 반환. (예) {{ 1 in [1, 2, 3] }} 경우, true 반환.
  • is 키워드 - test(테스트) 수행.
  • | (파이프기호, 수직바기호) - filter(필터) 적용.
  • ~ (틸데기호, 문자열연결기호, 물결무늬기호) - 모든 피연산자를 문자열로 변환하고 연결. (예) name 변수값이 John인 경우, { "Hello " ~ name ~ "!" }} 는 Hello John! 반환.
  • () (소괄호기호) - ① 콜러블(callable) 호출. (예) {{ post.render() }} ② 괄호 안에는 Python과 마찬가지로 위치 인수와 키워드 인수를 사용 가능. (예) {{ post.render(user, full=true) }}
  • . (미침표기호) 또는 [] (대괄호기호) - 객체의 속성 얻기. 변수 설명 참조

 

 

if 표현식 (If Expression)

 

  • 인라인 if 표현식 사용하면  일부 상황에서 매우 유용. (예) layout_template 변수가 정의되어 있으면 layout_template 템플릿 상속하고, 그렇지 않으면 default.html 템플릿 상속 경우 표현식: {% extends layout_template if layout_template is defined else 'default.html' %}
  • 일반 구문: <표현식이 참이면 수행할 일> if <표현식> else <표현식이 거짓이면 수행할 일>
  • else 부분은 선택적임. 제공되지 않으면 else 블록은 암묵적으로 무조건 Undefined 객체로 평가됨. (예)  page.title 값 존재 시, page.title 값을 대괄호([])로 감싸기 표현식: {{ "[{}]".format(page.title) if page.title }}

 

[예제]

{% set page = namespace() %}

{% set page.title = "홈짱닷컴 Homzzang.com" %}

{{ "[{}]".format(page.title) if page.title }}


결과값: [Homzzang.com]

 

파이썬 메서드 (Python Methods)

 

  • 각 변수의 데이터타입에 속하는 메서드이면 어떤 것이든 사용 가능. 메서드 호출 시 반환값이 표현식의 값으로 사용됨. (예) page.title 값이 문자열이고 문자열 타입에 속하는 capitalize() 메서드 호출 표현식: {{ page.title.capitalize() }}
  • 이는 사용자 정의 타입에 대한 메서드에도 적용됨. (예)  Foo 타입의 변수 f에 bar 메서드가 정의되어 있다면 표현식: {{ f.bar(value) }}
  • 연산자 메서드도 예상대로 작동함. (예) %는 문자열에 대한 printf 스타일을 구현함. {{ "Hello, %s!" % name }}
  • 그러나, % 연산자 대신 .format 메서드 사용 권장함. {{ "Hello, {}!".format(name) }}

 


방문 감사합니다. (즐겨찾기 등록: Ctrl + D)

분류 제목
template Jinja - 템플릿 - 개요 / 템플릿파일확장자 (Template - Synopsis / Template …
template Jinja - 템플릿 - 변수 (Template - Variables)
template Jinja - 템플릿 - 필터 (Template - Filters)
template Jinja - 템플릿 - 테스트 (Template - Tests)
template Jinja - 템플릿 - 주석 (Template - Comments)
template Jinja - 템플릿 - 공백 제어 ★ (Template - Whitespace Control)
template Jinja - 템플릿 - 회피처리 (Template - Escaping) ※ 진자 템플릿 코드를 문자 그대로…
template Jinja - 템플릿 - 라인 구문 (Template - Line Statements) ※ 약식 코드
template Jinja - 템플릿 - 템플릿 상속 ★★★ (Template - Template Inheritance)
template Jinja - 템플릿 - HTML 회피 (Template - HTML Escaping) ※ e필터 = 이필터
template Jinja - 템플릿 - 제어 구조 목록 ★★★ (Template - List of Control Struc…
template Jinja - 템플릿 - 컨텍스트 동작 가져오기 (Template - Import Context Behavi…
template Jinja - 템플릿 - 표현식 ★ (Template - Expressions) ※ (자료형/연산자/기호/키…
template Jinja - 템플릿 - 내장필터 목록 (Template - List of Builtin Filters)
template Jinja - 템플릿 - 내장테스트 목록 (Template - List of Builtin Tests)
template Jinja - 템플릿 - 전역함수 목록 (Template - List of Global Functions)
template Jinja - 템플릿 - 확장 (Template - Extensions)
template Jinja - 템플릿 - 자동 이스케이프 재정의 (Template - Autoescape Overrides)
목록
찾아주셔서 감사합니다. Since 2012