>>> 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'
Tratando de encontrar una explicación de lo anterior. Probé esto en un intérprete para reducirlo a solo Jinja2, y nada más que pueda estar llamándolo, como Ansible con jinja2_native establecido en True.
Cuando no usamos jinja2_native, obtenemos el comportamiento esperado arriba de que las tres sustituciones ocurren con comillas simples alrededor de cada valor. Cuando jinja2_native se establece en verdadero (en NativeEnvironment como se muestra arriba), las comillas simples internas en la cadena se ignoran y se devuelve una sola cadena con las tres sustituciones.
Esto también ocurre incluso con caracteres adicionales entre comillas simples:
>>> e = NativeEnvironment()
>>> t = e.from_string("--foo='{{ foo }}' --bar='{{ bar }}'")
>>> t.render(foo='foobar', bar='barbaz')
u"--foo='foobar --bar=barbaz'"
Cualquier ayuda sería apreciada.
Para agregar una pequeña nota sobre por qué sucede esto (más o menos): la plantilla "--foo='{{ foo }}' --bar='{{ bar }}'"
se divide en los siguientes nodos:
--foo='
{{ foo }}
' --bar='
{{ bar }}
'"
El problema ocurre cuando native_concat
procesa 3. ' --bar='
, literal_eval
allí ve una cadena, quita las comillas y devuelve solo --bar=
que es correcto, pero no en este contexto :)
@davidism alguna idea?
Comentario más útil
Para agregar una pequeña nota sobre por qué sucede esto (más o menos): la plantilla
"--foo='{{ foo }}' --bar='{{ bar }}'"
se divide en los siguientes nodos:--foo='
{{ foo }}
' --bar='
{{ bar }}
'"
El problema ocurre cuando
native_concat
procesa 3.' --bar='
,literal_eval
allí ve una cadena, quita las comillas y devuelve solo--bar=
que es correcto, pero no en este contexto :)@davidism alguna idea?