Jinja: السماح لمرشح الخريطة باسترداد عناصر متعددة

تم إنشاؤها على ٢٩ فبراير ٢٠١٦  ·  4تعليقات  ·  مصدر: pallets/jinja

في الوقت الحالي ، لا يمكن استخدام وظيفة الخريطة إلا على النحو التالي:

[{'path':'/var/file1', 'mtime': '123', 'mode': '600',...},{'path':'/var/file2', 'mtime': '123', 'mode': 644, ...}]|map(attribute='path')

مع عودة

['/var/file1', '/var/file2']

(محرر المستندات: http://jinja.pocoo.org/docs/dev/templates/#map)

أريد أن أقترح السماح بهذا:

[{'path':'/var/file1', 'mtime': '123', 'mode': '600',...},{'path':'/var/file2', 'mtime': '123', 'mode': 644, ...}]|map(attribute=['path', 'mtime'])

أو

[{'path':'/var/file1', 'mtime': '123', 'mode': '600',...},{'path':'/var/file2', 'mtime': '123', 'mode': 644, ...}]|map(attributes=['path', 'mtime'])

الذي يجب أن يعود

[{'path':'/var/file1', 'mtime': '123'},{'path':'/var/file2', 'mtime': '123'}]

يمكنك بالفعل معرفة ما هو مفيد من أجل: معالجة قائمة الإملاءات بحيث تحتفظ هذه الإملاءات بمجموعة محدودة من السمات فقط.

التعليق الأكثر فائدة

إذا كان أي شخص لا يزال بحاجة إلى هذا ، فيمكنك استخدام الكود التالي (ضع playbooks/filter_plugins/mapattributes.py ):

#!/usr/bin/env python
class FilterModule(object):
  def filters(self):
    return { 'mapattributes': self.mapattributes }

  def mapattributes(self, list_of_dicts, list_of_keys):
    l = []
    for di in list_of_dicts:
      newdi = { }
      for key in list_of_keys:
        newdi[key] = di[key]
      l.append(newdi)
    return l

استخدم عبر:

ansible_mounts | mapattributes(['mount', 'size_total', 'size_available',])

ال 4 كومينتر

سوف أحب هذه الميزة.

لست واضحًا لماذا هذا مطلوب في القوالب. مجرد تكرار القواميس واستخدام السمات التي تحتاجها سيحقق نفس الشيء. إذا كنت بحاجة إلى بيانات مختلفة ، فمن الأفضل القيام بهذا التلاعب في Python قبل التقديم. يمكن أن أرى استخدامًا لإرجاع المجموعات.

إذا كان أي شخص لا يزال بحاجة إلى هذا ، فيمكنك استخدام الكود التالي (ضع playbooks/filter_plugins/mapattributes.py ):

#!/usr/bin/env python
class FilterModule(object):
  def filters(self):
    return { 'mapattributes': self.mapattributes }

  def mapattributes(self, list_of_dicts, list_of_keys):
    l = []
    for di in list_of_dicts:
      newdi = { }
      for key in list_of_keys:
        newdi[key] = di[key]
      l.append(newdi)
    return l

استخدم عبر:

ansible_mounts | mapattributes(['mount', 'size_total', 'size_available',])

لماذا تم إغلاق هذه المشكلة ولم يتم تنفيذ حل Nee6ione رسميًا؟ سيكون الأمر أبسط بكثير إذا تم دعمه بدون أي مكونات إضافية

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