我正在尝试使用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>
答案 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位数的精度。