>>> 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 with jinja2_native рд╕реЗрдЯ рдЯреВ рдЯреНрд░реВред
рдЬрдм jinja2_native рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдКрдкрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рддреАрди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕рд┐рдВрдЧрд▓ рдХреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм jinja2_native рдХреЛ рд╕рддреНрдп рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, 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=
рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рд╣реИ, рдмрд╕ рдЕрдВрджрд░ рдирд╣реАрдВ рд╣реИ рдпрд╣ рд╕рдВрджрд░реНрдн :)
@ рдбреЗрд╡рд┐рдбрд╡рд╛рдж рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ (рдЕрдзрд┐рдХ рдпрд╛ рдХрдо) рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП: рдЯреЗрдореНрдкрд▓реЗрдЯ
"--foo='{{ foo }}' --bar='{{ bar }}'"
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдиреЛрдбреНрд╕ рдореЗрдВ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ:--foo='
{{ foo }}
' --bar='
{{ bar }}
'"
рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм
native_concat
рдкреНрд░рдХреНрд░рд┐рдпрд╛ 3.' --bar='
,literal_eval
рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрдЦрддрд╛ рд╣реИ, рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдкреНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓--bar=
рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рд╣реИ, рдмрд╕ рдЕрдВрджрд░ рдирд╣реАрдВ рд╣реИ рдпрд╣ рд╕рдВрджрд░реНрдн :)@ рдбреЗрд╡рд┐рдбрд╡рд╛рдж рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?