2010-12-01 3 views
2

ich seltsame Verhalten mit Template Toolkit erlebe, ich habe eine Datenstruktur haben (definiert in Perl und als Parameter übergeben):Template-Toolkit für und IF Verhalten

({ FLAG => 1, some => data}, { some => data}, etc) 

und in einer Vorlage habe ich eine Schleife wie

[FOR ITEMS] 
    [IF (FLAG) ] 
    do something 
    [ELSE] 
    do something else 
    [END] 
[END] 

die Vorlage scheint nie die sonst zu geben, die einzige Art, wie ich es sonst die Eingabe bekommen wird, um die Daten zu ändern:

({ FLAG => 1, some => data}, { FLAG => 0, some => data}, etc) 

, so dass es zu falsch auswertet. Allerdings, wenn ich dann die Datenstruktur zu

({ some => data}, { some => data}, etc) 

ändern Es tritt immer das andere (weil es undef wertet falsch zu sein).

Es sieht so aus, als ob einige Variablen im Umfang für die nächste Iteration verbleiben, es sei denn, sie werden überschrieben. Ist dies das erwartete Verhalten? und wenn ja, ist das überall dokumentiert?

EDIT: Später fand ich, dass es ein anderes Problem war, das das oben genannte Verhalten verursachte, es war wegen mir, ELSEIF und nicht das korrekte "ELSIF" anderswo in der Schablone zu verwenden. Im Zweifelsfall prüfen Sie die von jira vorgeschlagene Lösung, die das Problem löste, das ich in meinem ursprünglichen Beitrag beschrieben habe.

Antwort

4

Sie können die Vorlage wie folgt ändern, indem Sie die Schleifenvariable einem benannten Hash zuweisen. Dann wird es sich so verhalten, wie Sie es erwarten.

[%FOREACH ITEM IN ITEMS%] 

    [%IF ITEM.FLAG %] 
    do something 
    [%ELSE%] 
    do something else 
    [%END%] 

[%END%] 
+0

Vielen Dank für Ihre Antwort, Ich habe das Problem ist, dass ich tatsächlich bin HTML-Template pro Vorlagen Template Toolkit-Vorlagen über einen Perl-Skript mit regex Substitution ‚Umwandlung‘. Sie in die von Ihnen vorgeschlagene Form zu bringen würde ein bisschen mehr Arbeit hinzufügen, wenn es jedoch die einzige Option ist, ist es immer noch überschaubar. – cjh