>>> 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'
Mencoba mencari penjelasan di atas. Menguji ini dalam penerjemah untuk mempersempitnya menjadi hanya Jinja2, dan tidak ada hal lain yang mungkin menyebutnya, seperti Ansible dengan jinja2_native disetel ke True.
Saat tidak menggunakan jinja2_native, kami mendapatkan perilaku yang diharapkan di atas bahwa tiga substitusi terjadi dengan tanda kutip tunggal di sekitar setiap nilai. Ketika jinja2_native disetel ke true (di NativeEnvironment seperti yang ditunjukkan di atas), tanda kutip tunggal dalam string diabaikan, dan satu string dikembalikan dengan tiga substitusi.
Ini juga terjadi bahkan dengan karakter tambahan di antara tanda kutip tunggal:
>>> e = NativeEnvironment()
>>> t = e.from_string("--foo='{{ foo }}' --bar='{{ bar }}'")
>>> t.render(foo='foobar', bar='barbaz')
u"--foo='foobar --bar=barbaz'"
Bantuan apa pun akan dihargai.
Untuk menambahkan sedikit catatan tentang mengapa ini (kurang lebih) terjadi: templat "--foo='{{ foo }}' --bar='{{ bar }}'"
dipecah menjadi simpul-simpul berikut:
--foo='
{{ foo }}
' --bar='
{{ bar }}
'"
Masalah terjadi ketika native_concat
memproses 3. ' --bar='
, literal_eval
sana melihat sebuah string, menghapus tanda kutip dan mengembalikan hanya --bar=
yang benar, hanya saja tidak masuk konteks ini :)
@davidisme ada pemikiran?
Komentar yang paling membantu
Untuk menambahkan sedikit catatan tentang mengapa ini (kurang lebih) terjadi: templat
"--foo='{{ foo }}' --bar='{{ bar }}'"
dipecah menjadi simpul-simpul berikut:--foo='
{{ foo }}
' --bar='
{{ bar }}
'"
Masalah terjadi ketika
native_concat
memproses 3.' --bar='
,literal_eval
sana melihat sebuah string, menghapus tanda kutip dan mengembalikan hanya--bar=
yang benar, hanya saja tidak masuk konteks ini :)@davidisme ada pemikiran?