>>> 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'
Tentando encontrar uma explicação para o acima. Testei isso em um interpretador para restringi-lo a apenas Jinja2, e nada mais que possa estar chamando, como Ansible com jinja2_native definido como True.
Ao não usar jinja2_native, obtemos o comportamento esperado acima de que as três substituições ocorrem com aspas simples em torno de cada valor. Quando jinja2_native é definido como verdadeiro (no NativeEnvironment, conforme mostrado acima), as aspas simples internas na string são desconsideradas e uma única string é retornada com as três substituições.
Isso também ocorre mesmo com caracteres adicionais entre aspas simples:
>>> e = NativeEnvironment()
>>> t = e.from_string("--foo='{{ foo }}' --bar='{{ bar }}'")
>>> t.render(foo='foobar', bar='barbaz')
u"--foo='foobar --bar=barbaz'"
Qualquer ajuda seria apreciada.
Para adicionar uma pequena observação sobre por que isso (mais ou menos) acontece: o modelo "--foo='{{ foo }}' --bar='{{ bar }}'"
é dividido nos seguintes nós:
--foo='
{{ foo }}
' --bar='
{{ bar }}
'"
O problema acontece quando native_concat
processa 3. ' --bar='
, literal_eval
lá vê uma string, retira as aspas e retorna apenas --bar=
que está correto, mas não em este contexto :)
@davidism algum pensamento?
Comentários muito úteis
Para adicionar uma pequena observação sobre por que isso (mais ou menos) acontece: o modelo
"--foo='{{ foo }}' --bar='{{ bar }}'"
é dividido nos seguintes nós:--foo='
{{ foo }}
' --bar='
{{ bar }}
'"
O problema acontece quando
native_concat
processa 3.' --bar='
,literal_eval
lá vê uma string, retira as aspas e retorna apenas--bar=
que está correto, mas não em este contexto :)@davidism algum pensamento?