检查tmpl_context(Python,Pylons,Genshi)中是否存在变量?

问题描述:

我想弄清楚如何使用Pylons和Python在模板上下文'tmpl_context'中检查变量是否存在。我正在尝试的是:检查tmpl_context(Python,Pylons,Genshi)中是否存在变量?

我有一个Pylons布局模板。当且仅当上下文中存在变量c.messages时,这应该包含消息部分。消息部分如下所示:

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

如果控制器未定义c.messages,则会产生错误。所以我只想在变量被定义时加入这个。有没有解决这个问题的方法?

元史具有用于突出部分定义的方法,该方法

如果定义(消息):

http://genshi.edgewall.org/wiki/Documentation/templates.html#defined-name

转动测试成hasattr(c, 'messages') and len(c.messages) > 0 ..或默认简单地组消息到[]

+1

请注意,如果c是字典,上述操作将不起作用,但您可以使用'len(c.get ('messages',[]))> 0'。 – 2013-08-31 08:36:09

我很欣赏我正在挖掘旧线程,但有一个替代解决方案。

我一直在努力让定义()正常工作。我已经找到了最有效的解决方案是使用一个列表如下:

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

基本的Python在元史 - 如果它是不确定的,我们给它的默认值。如果您需要确保默认值不会污染您的数据,请返回除0之外的其他内容。