Jinja: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рдмреАрдЪ рд╕рд┐рдВрдЧрд▓ рдХреЛрдЯреНрд╕ рдЫреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ Jinja2 NativeEnvironment

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЬреВрди 2019  ┬╖  1рдЯрд┐рдкреНрдкрдгреА  ┬╖  рд╕реНрд░реЛрдд: pallets/jinja

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

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

рдЖрдкрдХрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг

  • рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг: 2.7.5
  • рдЬрд┐рдВрдЬрд╛ рд╕рдВрд╕реНрдХрд░рдг: 2.10, 2.10.1, рд╡рд░реНрддрдорд╛рди рдорд╛рд╕реНрдЯрд░

рдЙрдкрд░реЛрдХреНрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕реЗ рдХреЗрд╡рд▓ 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 }}'" рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдиреЛрдбреНрд╕ рдореЗрдВ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ:

  1. --foo='
  2. {{ foo }}
  3. ' --bar='
  4. {{ bar }}
  5. '"

рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм native_concat рдкреНрд░рдХреНрд░рд┐рдпрд╛ 3. ' --bar=' , literal_eval рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрдЦрддрд╛ рд╣реИ, рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдкреНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ --bar= рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рд╣реИ, рдмрд╕ рдЕрдВрджрд░ рдирд╣реАрдВ рд╣реИ рдпрд╣ рд╕рдВрджрд░реНрдн :)

@ рдбреЗрд╡рд┐рдбрд╡рд╛рдж рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

>рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ (рдЕрдзрд┐рдХ рдпрд╛ рдХрдо) рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП: рдЯреЗрдореНрдкрд▓реЗрдЯ "--foo='{{ foo }}' --bar='{{ bar }}'" рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдиреЛрдбреНрд╕ рдореЗрдВ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ:

  1. --foo='
  2. {{ foo }}
  3. ' --bar='
  4. {{ bar }}
  5. '"

рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм native_concat рдкреНрд░рдХреНрд░рд┐рдпрд╛ 3. ' --bar=' , literal_eval рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрдЦрддрд╛ рд╣реИ, рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдкреНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ --bar= рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рд╣реИ, рдмрд╕ рдЕрдВрджрд░ рдирд╣реАрдВ рд╣реИ рдпрд╣ рд╕рдВрджрд░реНрдн :)

@ рдбреЗрд╡рд┐рдбрд╡рд╛рдж рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

glasserc picture glasserc  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

AMDmi3 picture AMDmi3  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jp-costa picture jp-costa  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hvnsweeting picture hvnsweeting  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

The-Compiler picture The-Compiler  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ