Jinja: マップフィルターが複数のアイテムを取得できるようにする

作成日 2016年02月29日  ·  4コメント  ·  ソース: pallets/jinja

現時点では、 map関数は次のようにのみ使用できます。

[{'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'}]

これが何に役立つかはすでにわかります。dictのリストを操作して、これらのdictが限られた属性のセットのみを保持するようにします。

最も参考になるコメント

それでも誰かがこれを必要とする場合は、次のコードを使用できます( 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 評価