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

[공지] Jinja - 진자 문법 핵심정리

목차
  1. jinja 소개
  2. 출력(Output)
  3. 주석(Comments)
  4. 조건문(Conditionals)
  5. 반복문(Loops)
  6. 필터(Filters)
  7. 매크로(Macros)
  8. 템플릿 상속(Template Inheritance)
  9. 마크업 삽입
  10. 다른 파일의 템플릿을 삽입 (Include)
  11. 다른 파일의 코드(예: 변수/매크로/블럭)를 사용 (Import)

 

jinja 소개

※ 그누보드6에 사용된 jinja2 기준으로 설명. 

 

  • Jinja는 Python 기반의 템플릿 엔진임.
  • 주로 웹 프레임워크인 Flask와 함께 사용.
  • 동적으로 생성되는 텍스트 작성 위한 도구.

 

 

출력(Output)

 

  • '변수/표현식 출력' 구문: {{ ... }}



[예제]

 

  • {{ variable_name }}
  • {{ 2 + 2 }}
  • {{ "Hello " + name }}
  • {{ age > 18 }}

 

 

주석(Comments)

 

  • 주석은 "코드설명" 또는 "코드실행방지"할 때 사용.
  • 주석 구문: {# ... #}



[예제]

 

{# This is a comment in Jinja template #}

 

 

조건문(Conditionals)

 

  • if 조건문 구문: {% if condition %} ... {% endif %}

 


[예제]

 

(예제1)

{% if user.role == 'admin' %}

    Welcome, Admin!

{% elif user.role == 'user' %}

    Welcome, User!

{% else %}

    Unknown role

{% endif %}

 

(예제2)

{% if score >= 90 %}

  A

{% elif score >= 80 %}

  B

{% else %}

  C

{% endif %}

 

 

반복문(Loops)

 

  • for...in... 반복문 구문: {% for item in iterable %} ... {% endfor %}



[예제]

 

<ul>

{% for item in items %}

    <li>{{ item }}</li>

{% endfor %}

</ul>

 

 

필터(Filters)

 

  • 필터는 변수나 표현식에 적용되어 값을 변환하거나 포맷팅할 때 사용.
  • 구문1: {{ variable|filter_name }}
  • 구문2: {{ variable|filter_name(parameter) }}



[예제]

 

  • {{ user.name|capitalize }}
  • {{ date|format("YYYY-MM-DD") }}

 

 

매크로(Macros)

 

  • 매크로는 특정 코드 조각을 재사용하기 위함. (함수 비슷한 역할)
  • 정의 구문: {% macro macroName(param1, param2) %} <p>{{ param1 }} - {{ param2 }}</p> {% endmacro %}
  • 호출 구문: {{ macroName(value1, value2, ...) }}

 

PS. 함수처럼 매개변수 기본값 지정 가능. (예) param1="basicValue1"


[예제1] - 기본값 사용 X

 

{% macro greet(name) %}
    Hello, {{ name }}!
{% endmacro %}

{{ greet("홈짱") }}

 


[예제2] - 기본값 사용 O

{% macro greet(name="회원님") %}
    Hello, {{ name }}!
{% endmacro %}

{{ greet() }}

 

ps. 매크로 호출 시 독립변수가 없어, 기본값이 출력됨.


[예제3] - 매크로 구문 안에 다른 구문(예: 조건문) 사용.

{% macro greet(name) %} 

    {% if name %} 

        Hello, {{ name }}! 

    {% else %} 

        Hello, Guest! 

    {% endif %} 

{% endmacro %} 

 

{{ greet("홈짱") }}

 

템플릿 상속(Template Inheritance)

 

  • 기본 템플릿 만들고 다른 템플릿에서 상속해 확장 가능.
  • 템플릿 상속을 통해 공통된 레이아웃을 재사용 가능함.
  • 구문: {% extends "base_template.html" %}

 


[예제]

 

<!-- base_template.html -->

<!DOCTYPE html>

<html>

<head>

    <title>{% block title %}Default Title{% endblock %}</title>

</head>

<body>

    <div id="content">

        {% block content %}{% endblock %}

    </div>

</body>

</html>


<!-- child_template.html -->

{% extends "base_template.html" %}

{% block title %}Custom Title{% endblock %}

{% block content %}

    <p>This is the content of the child template.</p>

{% endblock %}

 

 

마크업 삽입

 

  • jinja가 해석하지 않고 그대로 마크업 코드를 출력시킬 때 사용.
  • 구문: {% raw %} ... {% endraw %}
  • 템플릿에서 JavaScript 코드나 다른 템플릿 엔진의 문법 등을 그대로 표현하고자 할 때 사용.
  • 특정 부분을 다른 프로그래밍 언어나 문법에 대해 유연하게 사용 가능.
  • 한 페이지에 너무 많이 사용 시 가독성에 안 좋음.

 

(예제)

{% raw %}

  {{ variable_name }}

{% endraw %}

 

 

다른 파일의 템플릿을 삽입 (Include)

 

  • include 구문은 다른 파일은 현재 파일에 삽입할 때 사용.
  • 구문: {% include "파일경로" option1 option2 ... %}

 

1. 파일명 동적 지정 구문.

{% set template_name = "파일경로" %}
{% include template_nameoption1 option2 ... %}

 

2. include 구문의 옵션 종류

  • with 옵션 - 삽입 템플릿에 전달한 변수와 값 지정. 
  • ignore missing 옵션 - 삽입될 파일이나 변수가 존재 안 해도 오류 발생시키지 않고 무시하지 진행. 
  • only 옵션 -  삽입 템플릿에 전달하는 변수를 삽입 템플릿에서만 사용 가능하게 함.



with 옵션

삽입되는 파일에 전달한 변수명과 값을 지정.

 

{% include "header.html" with title="메인 페이지" subtitle="웰컴 페이지" %}

 

PS. for 반복문 이용해 각 파일별로 다른 변수값을 전달 가능.

{% for user in users %} 

    {% include "user_card.html" with user=user %} 

{% endfor %}

 


ignore missing 옵션

삽입될 파일이나 변수가 존재 안 해도 오류 발생시키지 않고 무시하지 진행. 

 

{% include "mobile/bbs/menu.html" ignore missing %}

 


only 옵션

삽입 템플릿에 전달하는 변수를 삽입 템플릿에서만 사용 가능하게 함.

(예) 삽입 템플릿에 전달하는 title 변수는 삽입 템플릿에서만 사용 가능.

 

<!-- 현재 템플릿 (= 메인 템플릿) -->
<!DOCTYPE html>
<html>
<head>
    <title>{{ main_title }}</title>
</head>
<body>
    {% include "header.html" with title="메인 페이지" only %}
</body>
</html>

 

<!-- header.html 템플릿 (= 삽입 템플릿) -->
<header> <h1>{{ title }}</h1></header>


Jinja 템플릿 문법은 이외에도 다양한 기능을 제공. 공식 홈피 참고.

 

다른 파일의 코드(예: 변수/매크로/블럭)를 사용 (Import)

 

  • 외부에서 정의된 변수, 매크로, 혹은 블록을 현재 템플릿으로 가져오는데 사용됨. (즉,  import 구문을 통해 다른 템플릿에서 정의된 코드를 현재 템플릿에서 사용 가능.)
  • 임포트 구문: {% import "external_template.html" as alias %}

 

PS. import 구문 사용 시 주의사항.

  • import 구문은 템플릿의 최상위에 위치해야 함.
  • import 구문을 사용하면 가져온 템플릿의 모든 코드가 현재 템플릿에 포함됨. 이는 변수, 매크로, 블록 등을 모두 가져옴을 의미.
  • import로 가져온 내용을 사용할 때는 앞에 별칭을 붙여주어야 함.

 


 

<!-- external_template.html -->

{% macro greet(name) %}

  Hello, {{ name }}!

{% endmacro %}


{% set default_name = "Guest" %}

 

 

<!-- main_template.html -->

{% import "external_template.html" as ex %}


<!DOCTYPE html>

<html>

<head>

  <title>{{ main_title }}</title>

</head>

<body>

  <p>{{ ex.greet("홈짱") }}</p>

<!-- external_template.html에 정의된 greet 매크로 호출 -->


  <p>{{ ex.default_name }}</p>

  <!-- external_template.html에 정의된 default_name 변수 호출 -->

  

  <!-- 나머지 내용 -->

</body>

</html>



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

분류 제목
filters Jinja - list() 필터 - 리스트로 변환. (= list필터 = 리스트필터) ※ 리스트 자료형(=데…
filters Jinja - lower() 필터 - 소문자로 변환. (= lower필터 = 로우어필터) ※ 문자열 전체를 …
filters Jinja - map() 필터 - 각 아이템에 필터 적용하거나 속성 조회 (= map필터 = 맵필터)
filters Jinja - max() 필터 - 최대값 반환 (= max필터 = 맥스필터) ※ 최댓값
filters Jinja - min() 필터 - 최소값 반환 (= min필터 = 민필터) ※ 최솟값
filters Jinja - pprint() 필터 - 변수를 가독성 좋게 예쁘게 출력 (= pprint필터 = 피프린트필터…
filters Jinja - random() 필터 - 랜덤값 반환 (= random필터 = 랜덤필터) ※ 임의의 선택값 반…
filters Jinja - reject() 필터 - 지정 테스트 통과 못 한 요소만 필터링 해 구성된 반복자 반환 (= …
filters Jinja - rejectattr() 필터 - 지정 속성에 대한 테스트 통과 못 한 아이템만 필터링 (= r…
filters Jinja - replace() 필터 ★ - 문자열 대체 (= replace필터 = 리플레이스필터)
filters Jinja - reverse() 필터 ★ - 역순(= 순서 뒤집기) (= reverse필터 = 리버스필터)
filters Jinja - round() 필터 - 부동소수 반올림 (= round필터 = 라운드필터) ※ 일반반올림/천장…
filters Jinja - safe() 필터 ★★★ - 회피처리 안 함 (= 이스케이프 적용 X = safe필터 = 세이…
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필터 = 섬필터)
2/3
목록
찾아주셔서 감사합니다. Since 2012