2013-07-16 1 views
0

J'essaie d'avoir 2 instructions Tal conditionnelles qui vérifient si le code est l'une des 2 choses, puis effectuent les calculs correspondants. mais ce qui se passe est qu'il imprime les résultats des deux conditionnels côte à côte.tal: condition argument impression des deux instructions côte à côte

Merci!

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> 

Répondre

1

Il est assez difficile de ce que vous essayez de faire, ou ce que votre résultat attendu est. J'ai abordé les problèmes généraux avec votre code de modèle, laisse voir si cela résout vos problèmes:

Il semble que vous ayez vos étiquettes d'ouverture et de fermeture <span/> brouillées. À l'heure actuelle de votre structure ressemble à:

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

alors que je pense que vous vouliez vraiment:

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

Vous pouvez combiner les travées conditionnelles tal:content attributs au lieu de remplacer <span> imbriqués balises, formant:

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

o r, appliqué à votre exemple de code, avec quelques améliorations pour rendre les choses un peu plus facile à lire:

<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> 

Vous voulez peut-être faire en sorte que ceux float résultats sont déjà valeurs à virgule flottante et éviter tous ces float() appels à votre avis.

prennent également en compte que les valeurs à virgule flottante pourraient être pas tout à fait zéro, une valeur de 0.000001 ne correspond pas à 0 mais serait imprimé 0.000 si vous demandez une précision de 4 chiffres après la virgule.

+0

Je vais regarder ça et voir comment ça marche! Merci pour la réponse! Ce que j'essayais de faire est de choisir une équation ou l'autre, en fonction de la charge de travail de l'unité. Si l'équation se divise par 0, alors elle me donne un 0.0 les 4 décimales sont juste quelque chose que j'avais là-bas. – John

+0

J'ai testé cela et j'obtiens des erreurs de fonctionnement en prétendant que l'un de ces flotteurs dans le dénominateur est une chaîne. – John

+0

Ajout d'un niveau de parenthèse pour éviter cette erreur. –