私は Pyramid プロジェクトに取り組んでおり、後で何かを検討しています。私の特定のユース ケースは、リソース ツリーを上ってパンくずリストを作成することですが、一般的な実装にも興味があります。
Python コードでは、次のようにします。
while resource is not None:
pass # do something with resource
resource = resource.__parent__
しかし、カメレオンtal:repeat
では、for
ループである しか得られません。テンプレートに提供される関数を作成できることがわかります。
def ascend(resource):
while resource is not None:
yield resource
resource = resource.__parent__
これは、 として使用できますtal:repeat="item ascend(resource)"
。
これは次のように while ループに一般化できます。
def while_(value, condition, suite):
while condition(value):
yield value
value = suite(value)
使用法: tal:repeat="item while_(resource, lambda resource: resource is not None, lambda resource: resource.__parent__)"
. 醜い。あなたはかなり早く専門に行くと思います!
同様に、break
サポートされている場合は、無限for
ループが実行されます。しかし、そうではありません。(また、それをサポートするのも賢明ではないと思います。
これを達成するためのより良い方法や簡単な方法はありますか? (一般的なケースまたは私の特定のケース。)