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

[structures] Jinja - Assignments (할당) ※ set태그 = 셋태그 ※ namespace (네임스페이스) ※ 변수 생성, 변수에 값을 할당

Assignments (할당)

1. 코드 블록 내에서 변수에 값을 할당할 수도 있음. 최상위 수준('블록, 매크로 또는 루프'의 외부)의 할당은 최상위 매크로와 마찬가지로 템플릿에서 내보내기(export)되며, 다른 템플릿에서 가져오기(import) 가능함.



2. 할당은 set 태그 사용하며, 여러 대상을 가질 수 있음.

(예제1)

{% set navigation = [('index.html', 'Index'), ('about.html', 'About')] %}


Navigation:

{% for item in navigation %}

    <a href="{{ item[0] }}">{{ item[1] }}</a>

{% endfor %}


(예제2)

{% set key, value = "도메인","Homzzang.com" %}

{{ key }}: {{ value }}

 

PS. 예제2에 대한 공식 매뉴얼의 예제: {% set key, value = call_something() %}


할당에서 범위 동작 방식


1. 블록 내부에 변수를 설정하고 블록 외부에 표시되도록 하는 것은 불가능하다는 점을 명심. 이는 루프에도 적용됨. 해당 규칙의 유일한 예외는 범위를 도입하지 않는 if 문임. 결과적으로, 다음 템플릿은 예상(= 숫자만 출력)한 대로 작동하지 않음. 즉, did not iterate 값도 출력돼버림.

 
{% set seq = [1, 2, 3, 4, 5] %}

{% set iterated = false %}

{% for item in seq %}

    {{ item }}

    {% set iterated = true %}

{% endfor %}

{% if not iterated %} did not iterate {% endif %}

 
결과값: 1 2 3 4 5 did not iterate


2. Jinja 구문으로는 이 작업을 수행할 수 없음. 대신 루프 else 블록이나 특수 loop 변수와 같은 대체 구성을 사용.

 
{% set seq = [1, 2, 3, 4, 5] %}

{% for item in seq %}

    {{ item }}

{% else %}

    did not iterate

{% endfor %}

 
결과값: 1 2 3 4 5


3. Jinja 2.10 버전부터는 범위 전체에 변경 사항을 전파(예: for 반복문 내부에서 밖으로 값 전달.)할 수 있는 namespace 객체를 사용해 더 복잡한 사용 사례를 처리 가능.

 

{% set items = [{'title': 'Item 1', 'check_something': False}, {'title': 'Item 2', 'check_something': True}, {'title': 'Item 3', 'check_something': False}] %}

 

{% set ns = namespace(found=false) %}

{% for item in items %}

    {% if item.check_something() %}

        {% set ns.found = true %}

    {% endif %}

    * {{ item.title }}

{% endfor %}

something 갖은 아이템 발견: {{ ns.found }}

 

결과값: * Item 1 * Item 2 * Item 3 Found item having something: True


4. set 태그의 obj.attr 표기법은 네임스페이스 객체에만 허용됨. 다른 객체에 속성을 할당하려고 하면 예외(exception) 발생함.



5. Jinja 2.10 - 네임스페이스 객체에 대한 지원이 추가됨.

 

공식 매뉴얼: https://jinja.palletsprojects.com/en/3.1.x/templates/#assignments



분류 제목
filters Jinja - select() 필터 - 지정 테스트 통과한 요소만 필터링 (= select필터 = 실렉트필터…
filters Jinja - selectattr() 필터 - 지정 속성에 대한 테스트 통과한 아이템만 필터링 (= sele…
filters Jinja - slice() 필터 - 집합을 지정 개수로 쪼개기 (= slice필터 = 슬라이스필터) ※ 지…
filters Jinja - sort() 필터 ★ - 정렬 (= sort필터 = 소트필터) ※ 오름차순/내림차순
filters Jinja - string() 필터 - 문자열로 변환 (= string필터 = 스트링필터)
filters Jinja - striptags() 필터 ★ - 태그 제거 (= striptags필터 = 스트립태그스필터)
filters Jinja - sum() 필터 - (합계/합산/총합/총계) 구하기 (= sum필터 = 섬필터)
filters Jinja - title() 필터 - 각 단어의 첫글자를 대문자로 나머지는 소문자로 변환. (= title필…
filters Jinja - tojson() 필터 - JSON 문자열로 직렬화 (= tojson필터 = 투제이슨필터)
filters Jinja - truncate() 필터 - 문자열을 지정 길이로 자르기 (= truncate필터 = 트런케이…
filters Jinja - unique() 필터 - 고유 아이템으로 구성된 반복자 반환 (= unique필터 = 유니크필…
filters Jinja - upper() 필터 - 대문자로 변환 (= upper필터 = 어퍼필터) ※ 문자열 전체를 대문…
filters Jinja - urlencode() 필터 - URL 주소나 또는 쿼리에 적합한 문자열로 변환 (= urlen…
filters Jinja - urlize() 필터 ★ - 텍스트 URL을 클릭 가능한 링크로 변환 적용 (= urlize필…
filters Jinja - wordcount() 필터 - 문자열의 단어 개수 세기 (= wordcount필터 = 워드카운…
filters Jinja - wordwrap() 필터 - 문자열을 지정 길이 단위로 쪼개기 (= wordwrap필터 = 워…
filters Jinja - xmlattr() 필터 - dict의 아이템 기반으로 SGML/XML 속성 문자열 생성 (= …
tests Jinja - boolean() 테스트 - boolean 타입인지 체크 (= boolean테스트 = 불리언테…
tests Jinja - callable() 테스트 - 호출 가능한지 체크 (= callable테스트 = 콜러블테스트)
tests Jinja - defined() 테스트 ★ - 변수 정의되었는지 여부 체크 (= defined테스트 = 디파…
6/9
목록
찾아주셔서 감사합니다. Since 2012