我正在做一个 Pyramid 项目,并且正在考虑稍后会出现的东西。我的特定用例是提升资源树以构建面包屑,但我也对一般实现感到好奇。
在 Python 代码中,我想要这个:
while resource is not None:
pass # do something with resource
resource = resource.__parent__
但是在 Chameleon 中,你只会得到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
循环。但事实并非如此。(我认为,支持它也不明智。
有没有更好或更简单的方法来实现这一点?(一般情况或我的具体情况。)