Jinja: Jinja2 NativeEnvironment إسقاط علامات الاقتباس المفردة بين العناصر في القالب ليتم عرضها

تم إنشاؤها على ١٩ يونيو ٢٠١٩  ·  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'

بيئتك

  • إصدار Python: 2.7.5
  • إصدار Jinja: 2.10 ، 2.10.1 ، المعلم الحالي

محاولة إيجاد تفسير لما ورد أعلاه. اختبرت هذا في مترجم لتضييقه إلى 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 }}'" إلى العقد التالية:

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

تحدث المشكلة عندما يعالج native_concat 3. ' --bar=' ، literal_eval هناك ترى سلسلة ، تجرد علامات الاقتباس وتُرجع --bar= وهو الصحيح ، فقط ليس في هذا السياق :)

davidism أي أفكار؟

>كل التعليقات

لإضافة ملاحظة صغيرة حول سبب حدوث ذلك (أكثر أو أقل): تم تقسيم القالب "--foo='{{ foo }}' --bar='{{ bar }}'" إلى العقد التالية:

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

تحدث المشكلة عندما يعالج native_concat 3. ' --bar=' ، literal_eval هناك ترى سلسلة ، تجرد علامات الاقتباس وتُرجع --bar= وهو الصحيح ، فقط ليس في هذا السياق :)

davidism أي أفكار؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات