본문 바로가기
Log/Trouble shoot

flask_템플릿 엔진 jinja가 무엇인가

by RIEM 2022. 12. 11.
728x90

궁금하다

{% if msg %}

alert("{{ msg }}")

{% endif %}

플라스크 서버를 만들 때 이런 문법을 html 상에서 종종 사용할 때가 있다. 이건 무슨 문법인지 궁금해졌다.

 

알고보니

무슨 문법이고 찾아보니 jinja의 문법이라고 한다

 

Jinja는 무엇인가?

여기서 Jinja가 무엇인가? Jinja는 flask가 기본으로 제공하는 템플릿 엔진이다. 위에서 본 것들은 Jinja의 템플릿 문법으로 작성한 코드다.

 

왜 Jinja를 사용하나?

플라스크 서버를 구축하면 파이썬 app.py와 html 파일이 서로 정보를 주고 받는다. 이때 서버(app.py)에서 보낸 정보를 1)html 상에 출력을 하거나 2)html 코드 자체를 동적으로 제어할 때 사용한다.

 

어떻게 사용하나?

변수

>> test.py

return render_template(‘test.html’, msg=msg)

>>test.html

{{ msg }}

  • render_template의 2번째 인자로 데이터를 보내고, html 상에서 {{ }}으로 감싸주면 변수를 바로 사용할 수 있다.
  • 데이터는 콤마 구분으로 여러개 보낼 수 있다.
  • 파이썬과 html은 서로 다른 언어를 사용하지만, jinja 템플릿 덕분에 마치 공통의 언어에서 사용하는 변수 처럼 msg를 html 상에서도 사용할 수 있게 된다.


{% … %} for문

if, for 문 등 흐름 제어문 할당하는 구분자다.

>>test.html

{% for item in items %}

{% endfor %}

  • 반복문 시작을 {% for item in items %}으로 하고, 반복문의 끝에는 {% endfor %}를 붙여준다.
  • js에서 템플릿 리터럴로 temp_html = `` html 구문을 인위적으로 만든 후, 반복문으로 보여주는 방식과 유사해 보인다.


{% … %} if 문

>> test.py

{% if 조건 %}

실행 코드

{% elif 조건 %}

실행 코드

{% else %}

실행 코드

{% endif %}

  • if, elif, else 3가지 키워드를 사용할 수 있다
  • 마찬가지로 조건문 끝에는 endif 문을 붙여준다


형 변환

Jinja는 부득이하게 데이터 타입 수정 못하고 보내는 데이터를 html상에서 형 변환을 하게 해준다.

>> test.html

{{ number|int }}

  • {{ 데이터|자료타입 }} 형식으로 하면 된다.


자리수 콤마(,) 추가

회계 정보와 같이 세 자리 수 마다 콤마를 찍는 formatting도 할 수 있다.

>>test.html

{{‘{:,}’.format(number[0])}}


공백 제거 / 유지

>>test.html

공백 유지

{%+ %}

공백 제거

{% -%}

 

참조

https://gunbin91.github.io/python/2018/09/14/python_f_jinja.html

 

728x90

댓글