2010-11-09 15 views
5

Sto cercando di capire come verificare se esiste una variabile nel contesto del template 'tmpl_context' usando Pylon e Python. Quello che sto cercando di fare è:Controlla se la variabile esiste in tmpl_context (Python, Pylons, Genshi)?

Ho un modello di layout Pylon. Questo dovrebbe contenere una sezione di messaggio se, e solo se, la variabile c.messages esiste nel contesto. La sezione del messaggio è simile al seguente:

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

Questo genera un errore se il controller non definisce i messaggi. Quindi vorrei includere questo solo se la variabile è definita. c'è una soluzione per questo problema?

risposta

3

Girare il test in hasattr(c, 'messages') and len(c.messages) > 0 .. o semplicemente messaggi impostata su [] per impostazione predefinita

+1

Nota che se c è un dict, quanto sopra non funzionerà, ma è possibile utilizzare 'len (c.get ('messaggi', []))> 0' invece. –

0

Apprezzo che sto scavando un vecchio thread, ma ho una soluzione alternativa.

Ho sempre faticato a ottenere defined() per funzionare correttamente. La soluzione più efficace che ho trovato è quello di utilizzare il seguente per l'elenco:

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

base Python in Genshi - se è indefinita, diamo un valore predefinito. Se è necessario assicurarsi che il valore predefinito non contamini i dati, restituire qualcos'altro diverso da 0.

Problemi correlati