๐ Jinja template
๐ฅ Jinja ํ
ํ๋ฆฟ์ด๋?
๐ฅ ๋ณ์ ์ฌ์ฉํ๊ธฐ : {{๋ณ์๋ช
}}
๐ฅ ๋ฐ๋ณต๋ฌธ ์ฌ์ฉํ๊ธฐ : {% for %} ~ {% endfor %}
๐ฅ ์กฐ๊ฑด๋ฌธ ์ฌ์ฉํ๊ธฐ : {% if %} {% elif %} {% else %} ~ {% endfor %}
๐ฅ ํฌ๋กค๋งํ์ฌ html ์ ๋ณด ์ ๋ฌํ๊ธฐ
1. Jinja ํ
ํ๋ฆฟ์ด๋?
- ๊ฐ๋จํ ๋ฌธ๋ฒ์ผ๋ก html์์ {}, {{}} ๋ฑ์ ๊ท์น์ ์ด์ฉํ์ฌ python ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅ
- ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๋ณ์๋ฅผ return๊ฐ์ผ๋ก html๊ณผ ํจ๊ป ๋๊ฒจ์ค ๋ค, html์์ jinja ํ
ํ๋ฆฟ ๊ท์น์ ๋ฐ๋ผ ํ๋ฉด์ ํํํ ์ ์์
- Jinja ํ
ํ๋ฆฟ html์์ ์ฃผ์์ {# ์ฃผ์์ผ๋ก ์ฒ๋ฆฌํ ๋ด์ฉ #}์ผ๋ก ํ์
2. ๋ณ์ ์ฌ์ฉํ๊ธฐ : {{๋ณ์๋ช
}}
- Jinaja Templates์ flask์์ ์ ๊ณตํ๋ ์์ง์ผ๋ก html์ ๋ ๋๋งํ ๋, ๋ณ์๋ฅผ ์ ๋ฌํด์ฃผ๋ฉด ํด๋น html์์ ์ ๋ฌ๋ ๋ณ์๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅ
http://127.0.0.1:8080/hello/jaewon
์ ์ ์ํ๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋จ
http://127.0.0.1:8080/hello/
์ ๋ค์ ๊ฒฝ๋ก(<user>
)์ ๋ฐ๋ผ ํ์ด์ง์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋จ
- Jinja2 Tempaltes ๋ณ์ ๋๊ธฐ๊ธฐ : {{}}
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/hello/<user>')
def hello_name(user):
return render_template('variable.html', name1=user, name2='This is Jinja2 template')
if __name__ == '__main__':
app.run(host="0.0.0.0", port="8080")
- html์์ Jinja2 templates ๋ณ์ ํ์ฉ ๋ฐฉ๋ฒ : {{}}
<!DOCTYPE html>
<html>
<body>
<h1>Hello {{ name1 }}</h1>
<h2>{{ name2 }}</h2>
<h2>URL : http://127.0.0.1:8080/hello/{{ name1 }}</h2>
</body>
</html>
3. ๋ฐ๋ณต๋ฌธ ์ฌ์ฉํ๊ธฐ : {% for %} ~ {% endfor %}
- {% for %} ~ {% endfor %}์ด ์ฌ์ด์ html์ฝ๋์ {{๋ณ์๋ฅผ}} ์์น์ํค๋ฉด for๋ฌธ ์ฒ๋ผ ์ฌ์ฉํ ์ ์์
- ๋ค์ฌ์ฐ๊ธฐ๋ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋จ
- rangeํจ์๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, len() ํจ์๋ฅผ ์ฐ๊ณ ์ํ ๋๋ {% for value in ranage(values | length) %} ํ์์ผ๋ก ์์ฑํจ
- {{ loop.index }} ๋ for๋ฌธ์์ enumerate์ฒ๋ผ ๋ฒํธ๋ฅผ ๋งค๊ธธ ๋ ์ฌ์ฉํ๊ณ , 1๋ฒ๋ถํฐ ๋ฒํธ๋ฅผ ๋ถ์
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/hello_loop')
def hello_name():
value_list = ['list1', 'list2', 'list3']
return render_template('loop.html', values=value_list)
if __name__ == '__main__':
app.run(host="0.0.0.0", port="8080")
- โhtml์์ Jinja2 templates for๋ฌธ ํ์ฉ ๋ฐฉ๋ฒ
<html>
<body>
<ol>
{% for value in values %}
<li>{{ value }}</li>
{% endfor %}
</ol>
<ul>
{% for i in range(values | length) %}
<li>{{ values[i] }} : {{ loop.index }}๋ฒ์งธ</li>
{% endfor %}
</ul>
</body>
</html>
4. ์กฐ๊ฑด๋ฌธ ์ฌ์ฉํ๊ธฐ : {% if %} {% elif %} {% else %} ~ {% endfor %}
- {% %} ์ ๊ท์น์ ์ด์ฉํ์ฌ, if, elif, else ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ , {% endfor %}์ผ๋ก ์กฐ๊ฑด๋ฌธ ์ข
๋ฃ
- ๋ค์ฌ์ฐ๊ธฐ ๊ท์น ๋ฌด์
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/hello_if')
def hello_html():
value = 27
return render_template('condition.html', data=value)
if __name__ == "__main__":
app.run(host="0.0.0.0", port="8080")
- html์์ Jinja2 templates if๋ฌธ ํ์ฉ ๋ฐฉ๋ฒ
<html>
<body>
{% if data >= 30 %}
<h3>30๋ณด๋ค ํฝ๋๋ค.</h3>
{% elif data > 25 %}
<h3>25๋ณด๋ค ํฝ๋๋ค.</h3>
{% else %}
<h3>{{ data }}</h3>
{% endif %}
</body>
</html>
5. ํฌ๋กค๋งํ์ฌ html ์ ๋ณด ์ ๋ฌํ๊ธฐ : google ํด๋ก
- ๊ธฐ์กด์ ์๋ ์ฌ์ดํธ๋ฅผ requests๋ฅผ ํตํด html์ ์ ๋ถ ํฌ๋กค๋งํ ๋ค, ์ด๋ฅผ flask์์ return์ผ๋ก ๋์ง๋ฉด ํ์ด์ง๊ฐ ๋ณต์ฌ๋จ
- ๋ฌผ๋ก , ์ผ๋ถ css ํจ๊ณผ๋ imgํ์ผ์ ์ค์ google ์๋ฒ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ฉ๋์ง ์์
from flask import Flask, render_template
import requests
app = Flask(__name__)
@app.route('/google')
def get_google():
res = requests.get('https://www.google.com')
return res.text
if __name__ == "__main__":
app.run(host="0.0.0.0", port="8080")