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

[공지] 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)

분류 제목
python_types Jinja - 고유 파이썬 타입 - 예제들 (Native Python Types - Examples)
python_types Jinja - 고유 파이썬 타입 - API (Native Python Types - API)
목록
찾아주셔서 감사합니다. Since 2012