진자 (템플릿 엔진)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
진자는 파이썬으로 작성된 템플릿 엔진이다. 샌드박스 실행, 자동 HTML 이스케이핑, 템플릿 상속, JIT 컴파일, 디버깅 용이성 등 다양한 기능을 제공하며, 유닉스 파이프라인과 유사한 필터 시스템을 갖추고 있다. Jinja는 태그, 필터, 테스트, 글로벌 함수 등을 사용자 정의할 수 있으며, 템플릿에서 객체의 메서드를 호출할 수 있다는 점에서 Django 템플릿 엔진과 차이를 보인다. 템플릿은 이중 중괄호, 구문 블록은 {% ... %}를 사용하며, 주석은 {# ... #}로 표현한다.
더 읽어볼만한 페이지
- 파이썬 라이브러리 - Tkinter
Tkinter는 Tcl/Tk 툴킷을 파이썬 래퍼로 구현한 GUI 표준 라이브러리로서, 다양한 위젯과 배치 관리자를 제공하며 테마 Tk 기능을 통해 위젯 외관을 변경할 수 있도록 지원한다. - 파이썬 라이브러리 - SciPy
SciPy는 NumPy 배열 구조를 기반으로 수치 적분, 선형 대수, 최적화, 통계 등 과학 및 공학 계산에 사용되는 다양한 기능을 제공하는 파이썬 과학 컴퓨팅 라이브러리이다. - 파이썬 소프트웨어 - 패키지킷
패키지킷은 다양한 리눅스 배포판에서 패키지 설치, 업데이트 및 관리를 단순화하기 위해 서로 다른 패키지 관리 시스템을 통합하여 일관된 인터페이스를 제공하는 시스템이다. - 파이썬 소프트웨어 - PyPy
PyPy는 파이썬의 호환 가능하고 빠른 구현을 목표로 하는 동적 언어 구현 프레임워크이며, RPython을 사용하여 JIT 컴파일러를 생성하고, Python 2.7과 3.10 버전을 지원한다. - 자유 시스템 소프트웨어 - 리눅스 커널
리눅스 커널은 1991년 리누스 토르발스가 개발을 시작한 UNIX에서 영감을 받은 운영 체제 커널로, GPLv2 라이선스를 채택하여 자유로운 사용과 배포를 허용하며 다양한 하드웨어 아키텍처를 지원하고 모듈형 구조를 통해 장치 드라이버 추가가 가능하다. - 자유 시스템 소프트웨어 - ZeroMQ
ZeroMQ는 다양한 메시징 패턴을 지원하고 높은 성능을 제공하는 메시지 라이브러리이다.
진자 (템플릿 엔진) - [IT 관련 정보]에 관한 문서 | |
---|---|
개요 | |
종류 | 웹 템플릿 엔진 |
언어 | 파이썬 |
개발자 | 아르민 로나허 |
최초 릴리스 | 2008년 7월 17일 |
최신 버전 | 3.1.2 |
최신 버전 배포일 | 2022년 4월 29일 |
라이선스 | BSD 라이선스 |
웹사이트 | Jinja 공식 웹사이트 |
특징 | |
주요 기능 | 샌드박스 실행 자동 HTML 이스케이프 템플릿 상속 확장 가능 |
2. 기능
- 샌드박스 실행
- HTML 이스케이핑 자동 수행으로 사이트 간 스크립팅(XSS) 공격 방지
- 템플릿 상속
- 적시(JIT)에 최적의 파이썬 코드로 컴파일
- 선택적 사전 템플릿 컴파일
- 디버깅 용이 (예: 예외의 줄 번호가 템플릿의 정확한 줄을 직접 가리킴)
- 구성 가능한 구문
Smarty와 마찬가지로 유닉스 파이프라인과 유사한 사용하기 쉬운 필터 시스템을 제공하며, 유닉스의 파이프와 같은 간단한 표기법으로 데이터를 가공할 수 있다.
또한, 태그, 필터, 테스트, 글로벌이라고 불리는 기능을 사용자 정의할 수 있으며, Django의 템플릿 엔진과는 달리, 템플릿에서 객체의 메서드를 인수를 붙여 호출할 수 있다.
2. 1. 핵심 기능
- 샌드박스 실행[9]
- HTML 이스케이핑 자동 수행으로 사이트 간 스크립팅(XSS) 공격 방지[9]
- 템플릿 상속[9]
- 적시(JIT)에 최적의 파이썬 코드로 컴파일[9]
- 선택적 사전 템플릿 컴파일[9]
- 디버깅 용이 (예: 예외의 줄 번호가 템플릿의 정확한 줄을 직접 가리킴)[9]
- 구성 가능한 구문[9]
진자는 Smarty와 마찬가지로 유닉스 파이프라인과 유사한 사용하기 쉬운 필터 시스템을 제공한다.[9] 유닉스의 파이프와 같은 간단한 표기법으로 데이터를 가공할 수 있는 필터 시스템을 탑재하고 있다.
Jinja에서는 태그, 필터, 테스트, 글로벌이라고 불리는 기능을 사용자 정의할 수 있다. 또한, Django의 템플릿 엔진과는 달리, 템플릿에서 객체의 메서드를 인수를 붙여 호출할 수 있도록 되어 있다.
2. 2. 필터 시스템
진자는 Smarty와 마찬가지로 유닉스 파이프라인과 유사한 사용하기 쉬운 필터 시스템을 제공한다.[9] 유닉스의 파이프와 같은 간단한 표기법으로 데이터를 가공할 수 있다.2. 3. 사용자 정의 기능
Jinja에서는 태그, 필터, 테스트, 글로벌이라고 불리는 기능을 사용자 정의할 수 있다.[9] 또한, Django의 템플릿 엔진과는 달리, 템플릿에서 객체의 메서드를 인수를 붙여 호출할 수 있도록 되어 있다.3. 구문
Jinja는 다음과 같은 구문을 사용하여 템플릿을 작성한다.
- 출력 표시는 이중 중괄호를 사용한다. (예: ``)
- 변수 설정이나 출력이 없는 구문은 `{%` 및 `%}` 안에 `set` 키워드를 사용하여 묶는다. (예: `{% set foo = 42 %}`)
- 주석은 숫자 기호(`#`)를 사용한다. (예: `{# helpful comment #}`)[3]
- 필터는 세로 막대(`|`)를 사용한다. (예: ``) 변수는 여러 필터를 가질 수 있다. (예: ``)[3]
- 테스트는 `is` 키워드와 조건을 사용한다. (예: `{% if variable is divisibleby 10 %}do something{% endif %}`)[3]
- For 루프는 객체 속성을 유지하면서 시퀀스를 반복하는 데 사용한다.
```jinja
{% for user in users %}
{% endfor %}
```
`break` 및 `continue`는 루프 내에서 허용되지 않지만, 시퀀스는 필터링할 수 있다.
3. 1. 변수 출력
Jinja에서 변수 값을 출력하려면 이중 중괄호()를 사용한다. 예를 들어 ``와 같이 사용할 수 있다.세로 막대(`|`)를 사용하여 변수에 필터를 적용할 수 있다. 예를 들어 ``와 같이 사용하면 `variable`에 `filter`가 적용된 결과가 출력된다. 변수에 여러 필터를 적용할 수도 있다. (예: ``)[3]
3. 2. 구문 블록
Jinja에서 변수를 설정하거나 출력이 없는 구문은 `{%`와 `%}` 안에 `set` 키워드를 사용하여 묶을 수 있다. 예를 들어 `{% set foo = 42 %}`는 `foo`라는 변수를 값 42로 설정한다.For 루프는 객체 속성을 유지하면서 시퀀스를 반복하는 데 사용할 수 있다. 다음은 `username` 및 `password` 필드를 가진 사용자 목록을 반복하는 예제이다.
```
{% for user in users %}
{% endfor %}
```
`break` 및 `continue`는 루프 내에서 허용되지 않지만, 시퀀스는 필터링할 수 있다.[3]
3. 3. 주석
Jinja에서 주석은 숫자 기호(`#`)를 사용하여 작성할 수 있다. 예를 들어 `{# helpful comment #}`와 같이 사용한다.[3]3. 4. 테스트
Jinja에서 테스트를 만드는 구문은 `is` 키워드와 테스트의 유효성을 평가하기 위한 조건이다. 예를 들어 `4. 코드 예시
Jinja 템플릿을 사용하는 간단한 예시는 다음과 같다.[10]
`{%` 태그 뒤에 있는 마이너스 기호 (`-`)는 블록 (예: For 태그), 주석 또는 변수 표현식의 시작이나 끝에 추가될 때 해당 블록 앞뒤의 공백을 제거하는 역할을 한다.[11]
4. 1. 템플릿 파일 (예: example.html.jinja)
다음은 템플릿 파일 `example.html.jinja`의 예시이다.[10]```html+jinja
{%- for item in item_list %}
{% if not loop.last %},{% endif %}
{%- endfor %}
```
위 템플릿에 사용된 코드는 다음과 같다.
```python
from jinja2 import Template
with open('example.html.jinja') as f:
tmpl = Template(f.read())
print(tmpl.render(
variable = 'Value with
item_list = [1, 2, 3, 4, 5, 6]
))
```
위 코드는 아래와 같은 HTML 문자열을 생성한다.
```html
1,
2,
3,
4,
5,
6
```
`{%` 태그 뒤의 마이너스 기호 (`-`)는 블록, 주석, 변수 표현식의 시작이나 끝에 추가될 경우 해당 블록 앞뒤의 공백을 제거하는 역할을 한다.[11]
다음은 간단한 사용 예시이다.
```html+jinja
from jinja2 import Template
template = Template('''\
{% for item in item_list %}
{% endfor %}
''')
rendered_text = template.render(
variable='Value with
item_list=[1, 2, 3, 4, 5, 6]
)
print(rendered_text)
```
이 코드는 다음과 같은 HTML 문자열을 출력한다.
```html
- 1
- 2
- 3
- 4
- 5
- 6
4. 2. 파이썬 코드
다음은 템플릿 파일 `example.html.jinja`의 예시이다:[10]```html+jinja
{%- for item in item_list %}
{% if not loop.last %},{% endif %}
{%- endfor %}
```
위 템플릿 코드는 다음과 같이 작성한다:
```python
from jinja2 import Template
with open('example.html.jinja') as f:
tmpl = Template(f.read())
print(tmpl.render(
variable='Value with
item_list=[1, 2, 3, 4, 5, 6]
))
```
위 코드는 다음과 같은 HTML 문자열을 생성한다:
```html
1,
2,
3,
4,
5,
6
```
`{%` 태그 뒤의 마이너스 기호 (`-`)는 해당 블록 앞뒤의 공백을 제거하는 역할을 한다.[11]
다음은 간단한 사용 예시이다:
```python
from jinja2 import Template
template = Template('''\
{% for item in item_list %}
{% endfor %}
''')
rendered_text = template.render(
variable='Value with
item_list=[1, 2, 3, 4, 5, 6]
)
print(rendered_text)
```
이 코드는 다음과 같은 HTML 문자열을 출력한다:
```html
- 1
- 2
- 3
- 4
- 5
- 6
4. 3. 출력 결과 (HTML)
다음은 템플릿 파일 `example.html.jinja`의 예시이다:[10]```html+jinja
{%- for item in item_list %}
{% if not loop.last %},{% endif %}
{%- endfor %}
```
위 템플릿에 대응하는 템플릿 코드는 다음과 같다:
```python
from jinja2 import Template
with open('example.html.jinja') as f:
tmpl = Template(f.read())
print(tmpl.render(
variable = 'Value with
item_list = [1, 2, 3, 4, 5, 6]
))
```
위 코드는 다음과 같은 HTML 문자열을 생성한다:
```html
1,
2,
3,
4,
5,
6
```
`{%` 태그 뒤의 마이너스 기호 (`-`)는 해당 블록 앞뒤의 공백을 제거하는 역할을 한다.[11]
다음은 간단한 사용 예시이다.
```html+jinja
from jinja2 import Template
template = Template('''\
{% for item in item_list %}
{% endfor %}
''')
rendered_text = template.render(
variable='Value with
item_list=[1, 2, 3, 4, 5, 6]
)
print(rendered_text)
```
위 코드는 다음과 같은 HTML 문자열을 출력한다.
```html
- 1
- 2
- 3
- 4
- 5
- 6
5. 명칭의 유래
6. Jinja2와 Django 템플릿 엔진 비교
Jinja2는 장고 템플릿 엔진과 여러 면에서 유사하지만, 몇 가지 중요한 차이점이 있다.
문법 및 기능:
- 변수: 장고에서는 ``를 사용하지만, Jinja2에서는 `` 또는 `{% set variable = value %}`를 사용하여 변수를 할당할 수 있다.
- 필터: 장고와 Jinja2 모두 변수 값을 수정하는 필터를 제공한다. 문법은 ``로 동일하지만, 사용 가능한 필터 종류가 다를 수 있다.
- 태그: 장고는 `{% if condition %}` ... `{% endif %}`와 같은 태그를 사용하는 반면, Jinja2는 `{% if condition -%}` ... `{%- endif %}`와 같이 태그 내 공백을 제어하는 기능을 추가로 제공한다.
- 템플릿 상속: 두 엔진 모두 `{% extends "base.html" %}`와 `{% block content %}` ... `{% endblock %}`를 사용하여 템플릿 상속을 지원한다.
- 매크로: Jinja2는 `{% macro name(arguments) %}` ... `{% endmacro %}`를 사용하여 재사용 가능한 코드 블록인 매크로를 정의할 수 있지만, 장고는 이 기능을 기본적으로 제공하지 않는다.
- 표현식: Jinja2에서는 ``과 같이 템플릿 내에서 간단한 표현식을 사용할 수 있지만, 장고는 제한적인 표현식만 허용한다.
성능:
- Jinja2는 일반적으로 장고 템플릿 엔진보다 빠르다고 알려져 있다. 이는 Jinja2가 템플릿을 파이썬 코드로 컴파일하여 실행하기 때문이다.
확장성:
- Jinja2는 사용자 정의 필터, 태그, 함수 등을 쉽게 추가할 수 있는 확장 기능을 제공한다. 장고도 확장 기능을 제공하지만, Jinja2만큼 유연하지 않다는 평가가 있다.
기타:
- Jinja2는 템플릿 내에서 파이썬 객체의 속성과 메서드에 접근하는 것이 더 자유롭다.
- Jinja2는 템플릿 디버깅을 위한 도구를 제공한다.
다음은 Jinja2와 장고 템플릿 엔진의 주요 차이점을 요약한 표이다.
기능 | Jinja2 | 장고 템플릿 엔진 |
---|---|---|
변수 할당 | `` 또는 `{% set variable = value %}` | `` |
공백 제어 | 태그 내 `-` 사용 (`{% if condition -%}`) | 미지원 |
매크로 | 지원 (`{% macro %}`) | 미지원 (별도 라이브러리 필요) |
표현식 | 자유로운 표현식 허용 (``) | 제한적인 표현식만 허용 |
성능 | 일반적으로 더 빠름 | Jinja2보다 느릴 수 있음 |
확장성 | 사용자 정의 필터, 태그, 함수 추가 용이 | 확장 기능은 Jinja2보다 덜 유연 |
객체 접근 | 객체 속성 및 메서드 접근 자유로움 | 제한적 |
디버깅 도구 | 제공 | 제한적 |
참조
[1]
웹사이트
Jinja2 Release History
https://pypi.org/pro[...]
2020-06-24
[2]
웹사이트
Extensions
https://jinja.pallet[...]
2015-05-26
[3]
웹사이트
Jinja built-in filters and tests (like Django filters)
https://www.webforef[...]
2023-08-14
[4]
웹사이트
Extensions
https://jinja.pallet[...]
2015-05-26
[5]
서적
Instant Flask Web Development
https://books.google[...]
Packt Publishing
2015-05-26
[6]
웹사이트
Templating (Jinja2) — Ansible Documentation
https://docs.ansible[...]
[7]
웹사이트
Understanding Jinja
https://docs.saltpro[...]
[8]
웹사이트
Jinja and macros | dbt Developer Hub
https://docs.getdbt.[...]
[9]
웹사이트
Welcome | Jinja2 (The Python Template Engine)
https://palletsproje[...]
[10]
웹사이트
Template Designer Documentation
https://jinja.pallet[...]
2024-01-09
[11]
웹사이트
Template Designer Documentation — Jinja Documentation (3.0.x)
https://jinja.pallet[...]
2024-01-09
[12]
웹사이트
Releases · pallets/jinja
https://github.com/p[...]
2023-12-04
[13]
웹사이트
Frequently Asked Questions — Jinja Documentation (2.10.x)
https://jinja.pallet[...]
2020-01-01
[14]
웹인용
Jinja2 Release History
https://pypi.org/pro[...]
2020-06-24
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com