Jinja: ํ…œํ”Œ๋ฆฟ์„ ๋‘ ๋ฒˆ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๋ Œ๋”๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2014๋…„ 12์›” 16์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pallets/jinja

์ €๋Š” 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>

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

python 3.4.2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•„์น˜ ๋ฆฌ๋ˆ…์Šค์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

PackageLoader ์ƒ์„ฑ์ž๋Š” ์ „์ฒด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‘ ๋ฒˆ์งธ๋กœ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์Šคํฌ๋ฆฝํŠธ ์ž์ฒด์—์„œ 2๋ฒˆ์˜ ์ธ์‡„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
๋Œ€์‹  FileSystemLoader๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))

๋ฌธ์„œ๊ฐ€ ์•ฝ๊ฐ„ ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ;)

๋ชจ๋“  5 ๋Œ“๊ธ€

['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'))

๋ฌธ์„œ๊ฐ€ ์•ฝ๊ฐ„ ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ;)

ๆˆ‘ไนŸๆ˜ฏ่ฟ™ๆ ท่งฃๅ†ณ็š„

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰