์ ๋ jinja2๋ฅผ ์ด์ ๋ง ์์ํ๋๋ฐ ๋ฌธ์ #255์ ์ค๋ช ๋ ์ ๋ง ์ด์ํ ๋ฌธ์ ์ ๋ถ๋ช์ณค์ต๋๋ค(๋ซ์์ง๋ง ๊ธฐ์์ ํ์ ์กฐ์น๋ ์์์ต๋๋ค).
์ ๋ Python 3.4.1์ ์คํํ๋ Windows 7 x64๋ฅผ ์ฌ์ฉ ์ค์
๋๋ค.
"easy_install Jinja2"๋ก jinja2๋ฅผ ์ค์นํ์ต๋๋ค.
๋ค์์ ํฌํจํ๋ ...jinja2-testjinja2-test.py๊ฐ ์์ต๋๋ค.
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('jinja2-test', 'templates'))
template = env.get_template('mytemplate.html')
print(env.list_templates())
print(template.render(the='variables', go='here'))
๊ทธ๋ฆฌ๊ณ ํ ํ๋ฆฟ ...jinja2-testtemplatesmytemplate.html
<html>
<head></head>
<body>
<h1>Rendered template</h1>
This template shows that the {{ the }} go {{ go }}
</body>
</html>
๋ช ๋ น์ค์์ python jinja2-test.py ๋ฐ ํ ํ๋ฆฟ์ด ๋์ด๋๊ณ ๋ ๋ฒ ๋ ๋๋ง๋ฉ๋๋ค.
...\jinja2-test> python jinja2-test.py
['mytemplate.html']
<html>
<head></head>
<body>
<h1>Rendered template</h1>
This template shows that the variables go here
</body>
</html>
['mytemplate.html']
<html>
<head></head>
<body>
<h1>Rendered template</h1>
This template shows that the variables go here
</body>
</html>
['mytemplate.html']
๊ฐ ๋ ๋ฒ ์ธ์๋๋ ๋ฐฉ์๋ ๋ณด๋ฉด ์คํฌ๋ฆฝํธ์ ๊ฐ ์ ํ์ ๋ ๊ฐ์ง ์ธ์ ๋ช
๋ น๋ฌธ์ด ํฌํจ๋์ด ์๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. Linux์ Windows์์ ๋ชจ๋ ์๋ํ์ง๋ง ์ฌํํ ์ ์์ต๋๋ค.
์ฌํํ ์ ์๋ค๋ฉด ๋ฌธ์ ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ ์ฒด ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ์ญ์์ค(์: Git ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ ์ฅ).
python 3.4.2๋ฅผ ์ฌ์ฉํ๋ ์์น ๋ฆฌ๋ ์ค์์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
PackageLoader ์์ฑ์๋ ์ ์ฒด ์คํฌ๋ฆฝํธ๋ฅผ ๋ ๋ฒ์งธ๋ก ์คํํ๊ณ ์์ผ๋ฉฐ ์คํฌ๋ฆฝํธ ์์ฒด์์ 2๋ฒ์ ์ธ์๊ฐ ์๋๋๋ค.
๋์ FileSystemLoader๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์๋ํฉ๋๋ค.
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))
๋ฌธ์๊ฐ ์ฝ๊ฐ ์คํด์ ์์ง๊ฐ ์์ต๋๋ค ;)
Python 2.7.11, Jinja2 2.8 ๋ฐ Flask 0.11.1์ด ์๋ Ubuntu 14.04์์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ด ์ฝ๋๋ ํ ๋ฒ๋ง ์คํ๋ฉ๋๋ค!
์ฐธ๊ณ : ์ด๊ฒ์ ์๋ฒ๋ฅผ ๋ค์ ์์ํ ํ ์ฒ์์ผ๋ก ์ผ๋ถ ํ์ด์ง๋ฅผ ์ด ๋๋ง ๋ฐ์ํฉ๋๋ค! ํ์ด์ง๋ฅผ ์ ๋ฐ์ดํธํ ๋ - ํ ํ๋ฆฟ์ด ํ ๋ฒ ๋ก๋๋ฉ๋๋ค.
์ด๊ฒ์ ์์ ์ ๊ฐ์ ธ์ค๋ example.py
ํ์ผ์ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
data = "foo"
import example
print(data)
python example.py
๋ ๋จผ์ example
๋ฅผ __main__
๋ก ๊ฐ์ ธ์จ ๋ค์ ์์ ์ example
๋ก ๊ฐ์ ธ์ต๋๋ค. ๊ฐ์ ธ์ค๊ธฐ ์บ์๊ฐ ์๋ํ๋ ๋ฐฉ์ ๋๋ฌธ์ ๋ชจ๋์ด ๋ ๋ฒ ์คํ๋ฉ๋๋ค. ๊ทธ๊ฒ์ ๋จ์ง Python์ผ ๋ฟ์ด๋ฉฐ Jinja๊ฐ ํ ์ ์๋ ์ผ์ด ์๋๋๋ค.
__init__.py
๋ก ์ค์ ํจํค์ง๋ฅผ ์ค์ ํ๊ณ ๋ชจ๋๋ก ์คํํ๊ฑฐ๋ ์ง์
์ ์ผ๋ก ์คํํ๋ฉด ์ด๋ฐ ์ผ์ด ๋ฐ์ํ์ง ์์ต๋๋ค. ๋๋ if __name__ == "__main__":
๋ธ๋ก์ ๋ฉ์ธ ์ฝ๋๋ฅผ ๋ฃ์ต๋๋ค.
python 3.4.2๋ฅผ ์ฌ์ฉํ๋ ์์น ๋ฆฌ๋ ์ค์์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
PackageLoader ์์ฑ์๋ ์ ์ฒด ์คํฌ๋ฆฝํธ๋ฅผ ๋ ๋ฒ์งธ๋ก ์คํํ๊ณ ์์ผ๋ฉฐ ์คํฌ๋ฆฝํธ ์์ฒด์์ 2๋ฒ์ ์ธ์๊ฐ ์๋๋๋ค.
๋์ FileSystemLoader๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์๋ํฉ๋๋ค.from jinja2 import Environment, FileSystemLoader env = Environment(loader=FileSystemLoader('templates'))
๋ฌธ์๊ฐ ์ฝ๊ฐ ์คํด์ ์์ง๊ฐ ์์ต๋๋ค ;)
ๆไนๆฏ่ฟๆ ท่งฃๅณ็
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
python 3.4.2๋ฅผ ์ฌ์ฉํ๋ ์์น ๋ฆฌ๋ ์ค์์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
PackageLoader ์์ฑ์๋ ์ ์ฒด ์คํฌ๋ฆฝํธ๋ฅผ ๋ ๋ฒ์งธ๋ก ์คํํ๊ณ ์์ผ๋ฉฐ ์คํฌ๋ฆฝํธ ์์ฒด์์ 2๋ฒ์ ์ธ์๊ฐ ์๋๋๋ค.
๋์ FileSystemLoader๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์๋ํฉ๋๋ค.
๋ฌธ์๊ฐ ์ฝ๊ฐ ์คํด์ ์์ง๊ฐ ์์ต๋๋ค ;)