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

6 投票
3 回答
1432 浏览
提问于 2025-04-16 06:48

我正在尝试弄明白如何在使用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

我知道我在翻旧帖,但我有一个不同的解决方案。

我一直在努力让defined()正常工作。到目前为止,我找到的最有效的解决办法是用下面的代码来处理列表:

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

在Genshi中使用基本的Python - 如果它没有定义,我们就给它一个默认值。如果你需要确保这个默认值不会影响你的数据,可以返回其他的值,而不是0。

3

把测试改成 hasattr(c, 'messages') and len(c.messages) > 0,或者干脆默认把 messages 设置为一个空列表 []。

5

Genshi 有一个专门的方法来处理这个问题。

如果定义了(messages):

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

撰写回答