我正在尝试在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>