웹개발/Flask

flask, Jinja, 진자, 템플레이팅 언어, templating language, {{ }}, 예제

Olivia-BlackCherry 2022. 11. 17. 07:49

Jinja

진자는 파이썬을 위한 템플레이팅 언어로 현대적이고 디자이너에게 우호적이다. 빠르고, 광범위하며, 안전하다.

진자는 이미 플라스크에 포함되어 있으므로, 플라스크가 설치되어 있다면 따로 설치할 필요가 없다.

파이썬 코드를 실행하기 위해 진자 마크업으로 {{ }}  안에 표현식을 넣어 사용한다.

 

예제 3가지를 풀어보며 진자 탬플레이팅 언어를 익혀보자.

 

<기본코드>

main.py

from flask impor Flask, render_template

app = Flask(__name__)

@app.route('/')
def home()
  return render_template("index.html")
  
if __name__ =="__main__":
  app.run(debug=True)

 

 

< 예제1 >
5*6 표현식 넣기

index.html

!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>olivia</title>
</head>
<body>
    <h1>hello world</h1>
    <h2>4*6*3</h2>
</html>

 

위의 경우처럼 index.html 파일의 h2에서 5*6이라고 적으면, 

실제 화면에는 4*6*3이라고 나온다. 

4*6*3의 파이썬 연산이 적용되지 않는다. 

 

<h2>{{ 4*6*3 }}</h2>

그런데위와 같이 {{ }} 안에 코드를 넣으면

이 부분을 파이썬 코드로 인식하여 파이썬 연산이 수행된 결과인

72가 화면에 보인다.

 

다른 것들은 전혀 바뀌지 않는다. 

오직 {{ }} 안에 있는 부분만 실제 파이썬 코드로 인식하고 

템플릿에 적용된다.

이것이 바로 템플레이팅 언어이다.

 

 

< 예제 2 >
random 숫자 넣기

main.py

from flask import Flask, render_template
import random

app= Flask(__name__)
@app.route('/')
def home():
    random_number= random.randint(1,10)
    return render_template("index.html")
 
if __name__ == "__main__":
    app.run(debug=True)

랜덤 숫자를 생성하기 위해 import random 한 후,

home 함수 안에, random_number을 만든다. 

render_template할 때 random_number가 index.html에 통합되어 렌더링되어야 한다는 점이다.

이를 위해 render_template의 파라미터를 사용할 것이다.

 

위의 flask.templating 해설을 보면, 

render_template 함수에서, 첫 번째 파라미터로는 렌더링할 template_name이 온다.

그리고나서는 무제한으로 **kwarg 키워드 아규먼트(=**context)가 올 수 있다. 

 

@app.route('/')
def home():
    random_number= random.randint(1,10)
    return render_template("index.html", num=random_number)

num이라는 변수를 생성했고, 템플릿이 렌더링 되면 변수의 이름과 값을 전달한다.

 

index.html

<h3>random number은 {{num}}입니다.</h3>

{{ }} 안에 num 변수를 넣는다.

화면에는 num 자리에 랜덤 함수가 생성된다.

 

 

< 예제 3>
footer에 현재 연도 표시하기

main.py

from flask import Flask, render_template
import random
import datetime

app= Flask(__name__)
@app.route('/')
def home():
    random_number= random.randint(1,10)
    this_year = datetime.datetime.today().year
    return render_template("index.html", num=random_number, year=this_year)

datetime 모듈을 import 한다. 

this year 변수에 현재 연도 값을 넣는다.

render_template 함수의 인자로 year을 만든다.

 

index.html

<footer>
    <p>현재 연도는 {{ year }}입니다.</p>
</footer>

{{ }} 안에 year 변수를 넣는다.

 

 

 

<최종결과>

 

 

<html 최종코드>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>olivia</title>
</head>
<body>
<h1>shello world</h1>
<h2>{{ 4*6*3 }}</h2>
<h3>random number은 {{num}}입니다.</h3>
</body>
<footer>
    <p>현재 연도는 {{ year }}입니다.</p>
</footer>
</html>