2010-11-09 11 views
5

Estoy intentando averiguar cómo verificar si existe una variable en el contexto de la plantilla 'tmpl_context' usando Pylons y Python. Lo que intento hacer es:Comprobar si la variable existe en tmpl_context (Python, Pylons, Genshi)?

Tengo una plantilla de diseño de Pilones. Esto debería contener una sección de mensaje si, y solo si, la variable c.messages existe en el contexto. La sección del mensaje tiene este aspecto:

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

Esto produce un error si el controlador no define c.messages. Entonces me gustaría incluir esto solo si la variable está definida. ¿Hay una solución para este problema?

Respuesta

3

Girar la prueba en hasattr(c, 'messages') and len(c.messages) > 0 .. o simplemente mensajes se ponen en [] por defecto

+1

Tenga en cuenta que si c es un dict, lo anterior no funcionará, pero puede usar 'len (c.get) ('mensajes', []))> 0' en su lugar. –

0

Aprecio que estoy desenterrando un hilo viejo, pero tengo una solución alternativa.

Siempre me ha costado conseguir que defined() funcione correctamente. La solución más efectiva que he encontrado es usar lo siguiente para una lista:

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

Python básico en Genshi - si es indefinido, le damos un valor predeterminado. Si necesita asegurarse de que el valor predeterminado no contamine sus datos, devuelva algo más que 0.