2010-11-09 16 views
5

Ich versuche herauszufinden, wie eine Variable im Vorlagenkontext 'tmpl_context' mit Pylons und Python existiert. Was ich versuche zu tun ist:Prüfen, ob eine Variable in tmpl_context existiert (Python, Pylons, Genshi)?

Ich habe eine Pylons-Layout-Vorlage. Dieser sollte nur dann einen Nachrichtenbereich enthalten, wenn im Kontext die Variable c.messages existiert. Der Meldungsbereich sieht wie folgt aus:

<div py:if="len(c.messages) > 0"> 
    <py:for each="msg in c.messages"> 
    <strong>${msg}</strong> 
    </py:for> 
</div> 

Dies ergibt einen Fehler, wenn der Controller c.messages nicht definiert. Daher möchte ich das nur einschließen, wenn die Variable definiert ist. Gibt es eine Lösung für dieses Problem?

Antwort

3

den Test in hasattr(c, 'messages') and len(c.messages) > 0 .. oder einfach Set-Nachrichten [] standardmäßig drehen

+1

Beachten Sie, dass, wenn c ein Diktat ist, das obige nicht funktioniert, Sie aber 'len (c.get ('Nachrichten', []))> 0 'stattdessen. –

0

Ich schätze, dass ich einen alten Thread ausgrabe, aber eine alternative Lösung habe.

Ich hatte immer Schwierigkeiten, definiert zu werden(), um richtig zu funktionieren. Die effektivste Lösung, die ich gefunden habe, ist das folgende eine Liste zu verwenden:

py:if="myobject.thelist.get('blah',0) == 0" 

Grund Python in Genshi - wenn es nicht definiert ist, werden wir es einen Standardwert geben. Wenn Sie sicherstellen müssen, dass der Standardwert Ihre Daten nicht verunreinigt, geben Sie etwas anderes als 0 zurück.

Verwandte Themen