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

时间:2010-11-09 18:14:27

标签: python pylons genshi

我试图弄清楚如何使用Pylons和Python检查模板上下文'tmpl_context'中是否存在变量。我想做的是:

我有一个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,则会产生错误。所以我只想在定义变量时才包含它。这个问题有解决方案吗?

3 个答案:

答案 0 :(得分:5)

Genshi有一个明确的方法

如果已定义(消息):

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

答案 1 :(得分:3)

将测试转换为hasattr(c, 'messages') and len(c.messages) > 0 ..或者只是默认将消息设置为[]

答案 2 :(得分:0)

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

我总是努力让定义()正常工作。我发现最有效的解决方案是使用以下列表:

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

Genshi中的基本Python - 如果它未定义,我们给它一个默认值。如果您需要确保默认值不会污染您的数据,请返回0以外的其他内容。