2010-11-09 6 views
5

J'essaie de comprendre comment vérifier si une variable existe dans le contexte de modèle 'tmpl_context' en utilisant Pylons et Python. Ce que j'essaye de faire est:Vérifiez si la variable existe dans tmpl_context (Python, Pylons, Genshi)?

J'ai un modèle de disposition de Pylons. Cela devrait contenir une section de message si, et seulement si, la variable c.messages existe dans le contexte. La section du message ressemble à ceci:

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

Ceci génère une erreur si le contrôleur ne définit pas c.messages. Donc, je voudrais inclure ceci seulement si la variable est définie. Y a-t-il une solution à ce problème?

Répondre

3

Tourner le test dans hasattr(c, 'messages') and len(c.messages) > 0 .. ou simplement des messages défini sur [] par défaut

+1

Notez que si c est un dict, ce qui précède ne fonctionnera pas, mais vous pouvez utiliser 'len (c.get ('messages', []))> 0' à la place. –

0

Je comprends que je suis en train de creuser un vieux fil, mais j'ai une solution alternative.

J'ai toujours eu du mal à obtenir defined() pour fonctionner correctement. La solution la plus efficace que j'ai trouvé est d'utiliser ce qui suit pour une liste:

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

Basic Python Genshi - si elle est définie, nous lui donnons une valeur par défaut. Si vous devez vous assurer que la valeur par défaut ne contaminera pas vos données, renvoyez un autre élément que 0.

Questions connexes