[Flask] Jinja2 사용법
Jinja2 템플릿
웹페이지에 필요한 부분을 변경할 때 사용하는 문법
웹페이지에서 파이썬 프로그래밍 가능
jinja2_test.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/hello/<id>')
def info(id):
return render_template('jinja2.html', name=id)
if __name__ == '__main__':
app.run(host='127.0.0.1', port='8080')
라우팅 경로로 받은 id 변수값을 인자로 받아서 jinja2.html을 리턴한다.
이 때, name이라는 변수 값에 넣어 jinja2.html에 적용시킨다는 의미이다.
jinja2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h1>Hello {{ name }}</h1>
</body>
</html>
jinja2.html 파일 내에서 jinja2의 문법이 사용된다.
위 jinja2_test.py에서 name 변수에 값을 넣어 적용시킨다고 했다.
이 변수값을 사용하려면
{ { 변수명 } }
위와 같은 문법으로 작성하면 된다.
결과

localhost:8080/hello 다음으로 Sso라는 값을 넘겼고 이를 받아 Hello Sso를 출력함을 볼 수 있다.

페이지 소스 코드를 확인해보면 {{name}}이 아닌 Sso가 들어갔다.
여러가지 변수를 사용하고 싶으면
name = id와 같이 name1 = pwd, name2 = age와 같이 (원하는 변수명 = 값) 넘겨주고
{{name}}, {{name2}}, {{name2}}로 하면된다.
반복문
jinja2에서 반복문도 사용할 수 있다.
문법
{ % for i in items %}
{ { i } }
{ % endfor % }
사용해보자.
jinja2_test.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/for')
def info():
num_li = [1, 2, 3]
return render_template('jinja2.html', nums=num_li)
if __name__ == '__main__':
app.run(host='127.0.0.1', port='8080')
jinja2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<ul>
{% for i in nums %}
<li>{{i}}</li>
{% endfor %}
</ul>
</body>
</html>
결과

언뜻 보면 jinja2에서 사용하는 문법과 python의 문법이 비슷하다고 느껴진다.
하지만 차이점이 있다.
반복문의 문법을 더 살펴보자.
li = [1, 2, 3]
for i in range(len(li)):
print(i)
위와 같은 파이썬 코드를 jinja2에서 써보자.
{ % for i in range(li | length) % }
{ { li[i] } } { { loop.index } }
{ % endfor % }
한 줄씩 보자.
- range(len(li)) → range(li | length)
- li의 길이만큼 반복
- li[i]
- li의 인덱스(i)번 째 가져오기
- 0부터 시작
- loop.index
- 반복문 횟수 가져오기
- 1부터 시작
코드로 보자.
jinja2_test.py는 for문을 사용했던 파일과 같다.
jinja2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<ul>
{% for i in range(nums | length) %}
<li>{{loop.index}} 번 num : {{nums[i]}}</li>
{% endfor %}
</ul>
</body>
</html>

조건문
문법
{ % if % }
{ % elif % }
{ % else % }
{ % endif % }
jinja2_test.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/if')
def info():
name = 'Sso'
return render_template('jinja2.html', name=name)
if __name__ == '__main__':
app.run(host='127.0.0.1', port='8080')
jinja2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
{% if name == 'Sso' %}
<h3> {{name}}가 맞습니다. </h3>
{% else %}
<h3> {{name}}는 아닙니다.</h3>
{% endif %}
</body>
</html>


이 때 들여쓰기는 하지 않아도 된다.
주석
문법
{ # 주석처리 할 내용 # }
'WebFramework > [Flask]' 카테고리의 다른 글
| [Flask] sqlalchemy create_engine 오류 (0) | 2023.03.30 |
|---|---|
| [Flask] Bootstrap 사용하기 (로그인) (0) | 2023.01.20 |
| [Flask] 간단한 로그인 구현 (HTML, GET) (0) | 2023.01.20 |
| [Flask] GET 사용법 (0) | 2023.01.20 |
| [Flask] httpi 설치 (0) | 2023.01.20 |