2014-07-10 22 views
5

Ich verwende Template::Toolkit und innerhalb einer for-Schleife Ich versuche, die Zeitzone eines Objekts zu ändern:Template :: Toolkit nicht auswerten Variable als Zeichenfolge

[%- FOR item IN c.user.items -%] 
    [% item.date.set_time_zone(c.user.timezone.name) %] 

    Date: [% item.date %] <br /> 
[% END %] 

Es funktioniert und es ändert sich die Zeitzone, aber die set_time_zone Funktion gibt das Objekt DateTime zurück, das dann auf der Seite ausgewertet wird. Daher wird die Zeichenfolge jedes Mal um die for-Schleife ausgewertet und auf die Seite gelegt. Ich weiß, dass einige andere Templating-Systeme zwei Sätze von Tags haben, einen, der besagt, dass nur dieser Code ausgeführt wird, und ein anderer, der sagt, wertet das aus und legt es auf die Seite. Hat Template :: Toolkit so etwas? Ich habe geschaut, aber ich kann nichts finden. Der einzige Weg, die ich bisher gefunden habe nicht die Zeichenfolge auf der Seite ausgewertet haben, um den Wert festgelegt, der auf eine Variable zurückgegeben wird:

[% var = item.date.set_time_zone(c.user.timezone.name) %] 

Hat jemand einen besseren Weg weiß, dass dies in Vorlage zu tun :: Werkzeugkasten?

Antwort

9

Versuchen Sie, die CALL Richtlinie:

[% CALL item.date.set_time_zone(c.user.timezone.name) %] 

Aus der Dokumentation:

Die CALL-Anweisung bei der Bewertung der Variable mit dem Namen GET, ähnlich ist, aber das Ergebnis zurückgegeben wird nicht gedruckt. Dies kann nützlich sein, wenn eine Variable an eine Subroutine oder Objektmethode gebunden ist, die Sie aufrufen möchten, aber nicht an dem zurückgegebenen Wert interessiert sind.

+0

perfekt! Vielen Dank :) – srchulo