检查变量是否存在于tmpl_context中(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
我知道我在翻旧帖,但我有一个不同的解决方案。
我一直在努力让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