Jinja: ํ›„ํ–‰ ์ค„ ๋ฐ”๊ฟˆ์€ ๋ Œ๋”๋งํ•  ๋•Œ ํ…œํ”Œ๋ฆฟ์—์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 05์›” 02์ผ  ยท  2์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pallets/jinja

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘

์ค„ ๋ฐ”๊ฟˆ(\n) ๋ฌธ์ž๋กœ ๋๋‚˜๋Š” ํŒŒ์ผ์„ ๋ Œ๋”๋งํ•  ๋•Œ ๋ Œ๋”๋ง๋œ ์ถœ๋ ฅ๋„ ์ค„ ๋ฐ”๊ฟˆ ๋ฌธ์ž๋กœ ๋๋‚  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ›„ํ–‰ ์ค„ ๋ฐ”๊ฟˆ์œผ๋กœ ํ…์ŠคํŠธ ํŒŒ์ผ์„ ๋๋‚ด๋Š” ๊ฒƒ์€ UNIX ๊ณ„์—ด ์‹œ์Šคํ…œ์˜ ํ‘œ์ค€ ๊ทœ์น™์ž…๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™

๋ Œ๋”๋ง๋œ ์ถœ๋ ฅ์—์„œ โ€‹โ€‹๋งˆ์ง€๋ง‰ ์ค„ ๋ฐ”๊ฟˆ์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

>>> c
u'foo is {{ foo }}\nquux is {{ quux }}\nasdf\n'
>>> t = jinja2.Template(c)
>>> t.render(foo="bar", quux="baz")
u'foo is bar\nquux is baz\nasdf'
>>> s = t.stream()
>>> s.next()
u'foo is \nquux is \nasdf'
>>> s.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ifreeman/.local/lib/python2.7/site-packages/jinja2/environment.py", line 1271, in __next__
    return self._next()
StopIteration
>>>

๋‹น์‹ ์˜ ํ™˜๊ฒฝ

  • Python ๋ฒ„์ „: 2.7.14+(Debian ๋ฒ„์Šคํ„ฐ/ํ…Œ์ŠคํŠธ)
  • Jinja ๋ฒ„์ „: 2.10(pip๋ฅผ ํ†ตํ•ด)

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

๋„ค, ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์˜ต์…˜์ธ์ง€ ๋ชฐ๋ž์ง€๋งŒ ์ด๊ฒƒ์ด ๊ธฐ๋ณธ๊ฐ’์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ…œํ”Œ๋ฆฟ ์–ธ์–ด์™€ ์•„๋ฌด ๊ด€๋ จ์ด ์—†๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ ์ž…๋ ฅ์„ ์ˆ˜์ •ํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์€ ์ด์ƒํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๋‚ด๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ์ด์œ ๋Š” ๋‚ด๊ฐ€ shinto-cli(https://github.com/istrategylabs/shinto-cli)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์ž‘์—…์—์„œ ์ผ๋ถ€ ํŒŒ์ผ์„ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ค„ ๋ฐ”๊ฟˆ ์—†์ด ํŒŒ์ผ์„ ์ถœ๋ ฅํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•  ๋•Œ ํ•œ ์ค„์— ์ค„์ด ํ•จ๊ป˜ ๋ญ‰๊ฐœ์กŒ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์†Œ์Šค๋ฅผ ํ›‘์–ด๋ณผ ๋•Œ๊นŒ์ง€ shinto-cli์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์—ด์–ด๋ณด๊ณ  python REPL์—์„œ ๊ธฐ๋ณธ jinja2 ํ…œํ”Œ๋ฆฟ์„ ์ง์ ‘ ์‹œ๋„ํ•˜๊ณ  ์ด๊ฒƒ์ด ๊ธฐ๋ณธ jinja2 ๋™์ž‘์ด๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

shinto-cli์— ๋ฌธ์ œ๋ฅผ ์—ด์–ด ๋ชจ๋“  ํ™˜๊ฒฝ ํ˜ธ์ถœ์— keep_trailing_newline=True ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

keep_trailing_newline=True ๋ฅผ Environment : http://jinja.pocoo.org/docs/api/#jinja2.Environment

๋„ค, ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์˜ต์…˜์ธ์ง€ ๋ชฐ๋ž์ง€๋งŒ ์ด๊ฒƒ์ด ๊ธฐ๋ณธ๊ฐ’์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ…œํ”Œ๋ฆฟ ์–ธ์–ด์™€ ์•„๋ฌด ๊ด€๋ จ์ด ์—†๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ ์ž…๋ ฅ์„ ์ˆ˜์ •ํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์€ ์ด์ƒํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๋‚ด๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ์ด์œ ๋Š” ๋‚ด๊ฐ€ shinto-cli(https://github.com/istrategylabs/shinto-cli)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์ž‘์—…์—์„œ ์ผ๋ถ€ ํŒŒ์ผ์„ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ค„ ๋ฐ”๊ฟˆ ์—†์ด ํŒŒ์ผ์„ ์ถœ๋ ฅํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•  ๋•Œ ํ•œ ์ค„์— ์ค„์ด ํ•จ๊ป˜ ๋ญ‰๊ฐœ์กŒ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์†Œ์Šค๋ฅผ ํ›‘์–ด๋ณผ ๋•Œ๊นŒ์ง€ shinto-cli์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์—ด์–ด๋ณด๊ณ  python REPL์—์„œ ๊ธฐ๋ณธ jinja2 ํ…œํ”Œ๋ฆฟ์„ ์ง์ ‘ ์‹œ๋„ํ•˜๊ณ  ์ด๊ฒƒ์ด ๊ธฐ๋ณธ jinja2 ๋™์ž‘์ด๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

shinto-cli์— ๋ฌธ์ œ๋ฅผ ์—ด์–ด ๋ชจ๋“  ํ™˜๊ฒฝ ํ˜ธ์ถœ์— keep_trailing_newline=True ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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