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

[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



분류 제목
tests Jinja - sameas() 테스트 - 두 객체의 메모리 주소 동일성 체크 (= sameas테스트 = 세임…
tests Jinja - sequence() 테스트 - 시퀀스인지 여부 체크 (= sequence테스트 = 시퀀스테스트…
tests Jinja - string() 테스트 - 문자열인지 체크 (= string테스트 = 스트링테스트)
tests Jinja - test() 테스트 - 테스트 존재 여부 체크 (= test테스트 = 테스트테스트)
tests Jinja - true() 테스트 - 참인지 체크 (= true테스트 = 트루테스트)
tests Jinja - undefined() 테스트 - 변수가 정의 안 되었는지 체크 (= undefined테스트 =…
tests Jinja - upper() 테스트 - 대문자인지 체크 (= upper테스트 = 어퍼테스트)
functions Jinja - range() 함수 ★ - 지정 범위 안 지정 간격의 정수 리스트 반환 (= range함수 =…
functions Jinja - lipsum() 함수 - 로렘입섬(= 의미없는 채우기용 문자열) (=lipsum함수 = 립섬함…
functions Jinja - dict() 함수 ★ - 딕트 리터럴 반환 (= 딕셔너리 반환 = dict함수 = 딕트함수)
functions Jinja - cycler() 함수 ★ - 교대순환 반환 (=cycler함수 = 사이클러함수) ※ cycle…
functions Jinja - joiner() 함수 ★ - 결합구분자 지정 (= 결합문자 지정 = joiner함수 = 조이너…
functions Jinja - namespace() 함수 - 속성 할당 가능한 변수 생성 (= namespace함수 = 네임…
structures Jinja - for 반복문 (= for반복문 = 포반복문/포문)
structures Jinja - if 조건문 (= if조건문 = 이프조건문/이프문)
structures Jinja - macro (매크로)
structures Jinja - call (콜블럭) ※ caller함수 = 콜러함수
structures Jinja - filter (필터섹션)
structures Jinja - Assignments (할당) ※ set태그 = 셋태그 ※ namespace (네임스페이스) …
structures Jinja - Block Assignments (블럭 할당)
8/9
목록
찾아주셔서 감사합니다. Since 2012