金字塔变色龙塔尔:状况'Not'问题



我正在尝试在Pyramid Chameleon模板中显示条件文本。基本上,检查字典关键字"maxed_out_alerts"是否为空(false)或其中有字符串"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总是被评估为一个真实的条件。它应该显示一条或另一条消息,而不是两者都显示。我做错了什么?感谢

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

<p tal:condition="python:len(maxed_out_alerts) > 0"><h3>Maxed Out.</h3></p>

如果将布尔状态保存在布尔变量中,会有所帮助。通过将这些信息存储在字符串中,您会遇到当前所面临的问题。这就是内置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>

相关内容

最新更新