>>> from jinja2 import Template
>>> template = Template("'{{ foo }}', '{{ bar }}', '{{ baz }}'")
>>> template.render(foo='foobar', bar='barbaz', baz='bazfoo')
('foobar', 'barbaz', 'bazfoo')
>>> from jinja2.nativetypes import NativeEnvironment
>>> e = NativeEnvironment()
>>> t = e.from_string("'{{ foo }}', '{{ bar }}', '{{ baz }}'")
>>> t.render(foo='foobar', bar='barbaz', baz='bazfoo')
'foobar, barbaz, bazfoo'
ΠΡΡΠ°ΡΡΡ Π½Π°ΠΉΡΠΈ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π²ΡΡΠ΅. ΠΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π» ΡΡΠΎ Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ΅, ΡΡΠΎΠ±Ρ ΡΡΠ·ΠΈΡΡ Π΅Π³ΠΎ Π΄ΠΎ Jinja2 ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π΅Π³ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ansible Ρ jinja2_native, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ Π½Π° True.
ΠΠΎΠ³Π΄Π° jinja2_native Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π²ΡΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΡΡΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ Π²ΠΎΠΊΡΡΠ³ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠΎΠ³Π΄Π° Π΄Π»Ρ jinja2_native ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true (Π² NativeEnvironment, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅), Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ Π² ΡΡΡΠΎΠΊΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ° Ρ ΡΡΠ΅ΠΌΡ Π·Π°ΠΌΠ΅Π½Π°ΠΌΠΈ.
ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΄Π°ΠΆΠ΅ Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΡΠΌΠΈ ΠΊΠ°Π²ΡΡΠΊΠ°ΠΌΠΈ:
>>> e = NativeEnvironment()
>>> t = e.from_string("--foo='{{ foo }}' --bar='{{ bar }}'")
>>> t.render(foo='foobar', bar='barbaz')
u"--foo='foobar --bar=barbaz'"
ΠΡΠ±Π°Ρ ΠΏΠΎΠΌΠΎΡΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΅Π½Π΅Π½Π° ΠΏΠΎ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²Ρ.
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ (Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅) ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ: ΡΠ°Π±Π»ΠΎΠ½ "--foo='{{ foo }}' --bar='{{ bar }}'"
ΡΠ°Π·Π±ΠΈΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ·Π»Ρ:
--foo='
{{ foo }}
' --bar='
{{ bar }}
'"
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° native_concat
ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ 3. ' --bar='
, literal_eval
ΡΠ°ΠΌ Π²ΠΈΠ΄ΠΈΡ ΡΡΡΠΎΠΊΡ, ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΊΠ°Π²ΡΡΠΊΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ --bar=
ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ Π² ΡΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ :)
@davidism ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΡΡΠ»ΠΈ?
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ (Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅) ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ: ΡΠ°Π±Π»ΠΎΠ½
"--foo='{{ foo }}' --bar='{{ bar }}'"
ΡΠ°Π·Π±ΠΈΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ·Π»Ρ:--foo='
{{ foo }}
' --bar='
{{ bar }}
'"
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π°
native_concat
ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ 3.' --bar='
,literal_eval
ΡΠ°ΠΌ Π²ΠΈΠ΄ΠΈΡ ΡΡΡΠΎΠΊΡ, ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΊΠ°Π²ΡΡΠΊΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ--bar=
ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ Π² ΡΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ :)@davidism ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΡΡΠ»ΠΈ?