条件取决于其他领域

时间:2011-03-09 13:43:50

标签: plone zope template-tal zpt

我有2个字段(fieldA和fieldB)

我想要的: - 如果fieldA包含某些内容,则不应显示fieldB

我尝试的是什么:

<span tal:replace="here/getFieldA" />

<span tal:omit-tag="here/getFieldA"  tal:replace="here/getFieldB" />

所以它不起作用

感谢您的帮助

3 个答案:

答案 0 :(得分:4)

您要找的是tal:condition,可能与not:exists:前缀相结合:

<span tal:replace="here/getFieldA" />

<span tal:condition="not:exists:here/getFieldA" tal:replace="here/getFieldB" />

或者,您可以使用| operator作为if运算符,测试第一个元素的存在。如果它不存在,它将使用下一个表达式,依此类推:

<span tal:replace="here/getFieldA | here/getFieldB" />

tal:omit-tag属性意味着非常不同。如果它的表达式求值为True,那么输出中将省略标记,只有标记本身。最好用一个例子说明这一点:

<span tal:omit-tag="">
    <i>This part will be retained</i>
</span>

渲染该页面模板导致:

<i>This part will be retained</i>

省略了周围的<span>标记,但保留了内容。

答案 1 :(得分:1)

尝试

<span tal:condition="here/getFieldA"  tal:replace="here/getFieldB" />

Zope页面模板参考http://docs.zope.org/zope2/zope2book/AppendixC.html

答案 2 :(得分:1)

这是对原始答案的改进,基于以下评论:

<tal:block 
    tal:define="zone here/getZoneintervention;
                thezone python:', '.join(zone);
                dep here/getDepartements;
                thedep python:', '.join(dep)">

   <span tal:condition="zone" tal:replace="thezone" /> 
   <span tal:condition="not:zone" tal:replace="thedep" /> 

</tal:block>