>>> 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 مع تعيين jinja2_native على True.
عند عدم استخدام jinja2_native ، نحصل على السلوك المتوقع أعلاه أن الاستبدالات الثلاثة تحدث مع علامات اقتباس مفردة حول كل قيمة. عندما يتم تعيين jinja2_native على صحيح (في البيئة الأصلية كما هو موضح أعلاه) ، يتم تجاهل علامات الاقتباس المفردة الداخلية في السلسلة ، ويتم إرجاع سلسلة واحدة مع الاستبدالات الثلاثة.
يحدث هذا أيضًا حتى مع وجود أحرف إضافية بين علامات الاقتباس المفردة:
>>> 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=
وهو الصحيح ، فقط ليس في هذا السياق :)
davidism أي أفكار؟
التعليق الأكثر فائدة
لإضافة ملاحظة صغيرة حول سبب حدوث ذلك (أكثر أو أقل): تم تقسيم القالب
"--foo='{{ foo }}' --bar='{{ bar }}'"
إلى العقد التالية:--foo='
{{ foo }}
' --bar='
{{ bar }}
'"
تحدث المشكلة عندما يعالج
native_concat
3.' --bar='
،literal_eval
هناك ترى سلسلة ، تجرد علامات الاقتباس وتُرجع--bar=
وهو الصحيح ، فقط ليس في هذا السياق :)davidism أي أفكار؟