tal:condition参数并排打印两个语句

时间:2013-07-16 19:22:42

标签: python conditional zope

我正在尝试使用2个Tal条件语句来检查代码是否是两件事之一,然后执行相应的计算。但是会发生的是它并排打印出两个条件的结果。

谢谢!

Unit    4.5522 0.0000
unit.. . 3.7628 0.0000
Unit     0.0000 14.6083
unit     0.0000 31.9430
<td style="text-align: right;">
  <span tal:condition="python:float(result.totdirrn)!=0 and (result.wkld1_desc!='Proceedures' and result.wkld1_desc!='Visits')">
  <span tal:replace="python:'%.4f'%(float(result.cenmn)/((((float(result.dirhrs)*(float(float(result.totdirrn)/float(result.dirhrs))))/14)/12)/2))">currentindex</span>
  <span tal:condition="python:float(result.totdirrn)!=0 and (result.wkld1_desc!='Census')">
  <span tal:replace="python:'%.4f'%(float(result.vipr)/((((float(result.dirhrs)*(float(float(result.totdirrn)/float(result.dirhrs))))/14)/12)/2))">currentindex</span></span>

  </span>
  <span tal:condition="python:(float(result.totdirrn)==0)">
  <span tal:replace="python:'%.1f'%(0.0)"></span></span>
</td>

1 个答案:

答案 0 :(得分:1)

目前还不清楚你要做什么,或者你的预期产出是什么。我已经解决了您的模板代码的一般问题,让我们看看是否能解决您的问题:

您的打开和关闭<span/>标签似乎混乱了。目前您的结构如下:

<span condition>
    <span replace></span>
    <span condition>
        <span replace></span>
    </span>
<span>
<span condition>
    <span replace></span>
</span>

虽然我怀疑你真的想要:

<span condition>
    <span replace></span>
<span>
<span condition>
    <span replace></span>
</span>
<span condition>
    <span replace></span>
</span>

您可以将条件跨度与tal:content属性结合,而不是替换嵌套的<span>标记,从而形成:

<span condition content></span>
<span condition content></span>
<span condition content></span>

或应用于您的示例代码,并进行一些改进以使事情更具可读性:

<td style="text-align: right;"
      tal:define="desc result/wkld1_desc;
                  totdirrn python:float(result.totdirrn);
                  cenmn python:float(result.cenmn);
                  dirhrs python:float(result.dirhrs);
                  vipr python:float(result.vipr);
                 ">
  <span tal:condition="python:totdirrn and desc not in ('Proceedures', 'Visits')"
        tal:content="python:'%.4f' % (cenmn / (dirhrs * (totdirrn / dirhrs) / 336))">currentindex</span>
  <span tal:condition="python:totdirrn and desc != 'Census'" 
        tal:content="python:'%.4f' % (vipr / (dirhrs * (totdirrn / dirhrs) / 336))">currentindex</span>
  <span tal:condition="python:not totdirrn">0.0</span>
</td>

您可能希望确保float结果的结果已经浮点值并避免视图中的所有float()次调用。

还要考虑到浮点值可能不完全为零,0.000001的值不等于0,但会打印为0.000如果你要求逗号后面有4位数的精度。