1

我正在尝试在 Pyramid Chameleon 模板中显示条件文本。基本上,检查字典键“maxed_out_alerts”是否为空(假)或其中包含字符串“yes”。

<p tal:condition="not:maxed_out_alerts"><h3>Maxed Out.</h3></p>
<p tal:condition="maxed_out_alerts"><h3>Not Maxed Out</h3></p>

当“maxed_out_alerts”为空字符串时,仅显示“Maxed Out”(正确)。但是,如果“maxed_out_alerts”包含“yes”字符串,则会显示“Maxed Out”和“Not Maxed Out”(错误地)。

似乎 NOT 总是被评估为真实条件。它应该显示一个或另一个消息,而不是两者。我究竟做错了什么?谢谢

4

2 回答 2

3

对于 python 中的 TAL 条件,您可以说python:然后使用 python 语法条件

<p tal:condition="python:len(maxed_out_alerts) > 0"><h3>Maxed Out.</h3></p>
于 2013-07-19T16:55:55.653 回答
1

如果您将布尔状态保存在布尔变量中,这可能会有所帮助。通过将此信息存储在字符串中,您会遇到您现在面临的此类问题。这就是内置 python 类型的用途——使用它们。

作为金字塔开发人员,我建议将评估 maxed_out_alerts 的当前值的逻辑移动到视图方法中的字符串中,并将字典中的计算字符串传递给渲染器/模板。通过这种方式,您甚至可以为视图逻辑创建测试 - 任何简单或高级的金字塔教程都会向您展示如何做到这一点。

任何简单逻辑的良好开端 - 想象逻辑变得更加复杂,或者您甚至必须翻译模板的文本。

@view_config(name="yourname", renderer='templates/yourtemplate.pt')
def myview(request):
    """
    #get boolean state from model
    #could be that you want to have it the other way round
    #or do it by using python ternary operator - a if test else b 
    if model['maxed_out_alerts'] == True:
        maxed_out_alerts = 'Maxed Out'
    else:
        maxed_out_alerts = 'Not Maxed Out'


    return dict(maxed_out_alerts = maxed_out_alerts)

在您的模板中

<h3 tal:content="maxed_out_alerts">text for maxed out alerts</h3>

或者

<h3>${maxed_out_alerts}</h3>
于 2013-07-22T14:52:02.193 回答