【问题标题】:Pyramid Chameleon Tal:condition 'Not' issue金字塔变色龙塔尔:条件“不”问题
【发布时间】:2013-07-14 01:15:06
【问题描述】:

我正在尝试在 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 总是被评估为真条件。它应该显示一个或另一个消息,而不是两者。我究竟做错了什么?谢谢

【问题讨论】:

  • 我不清楚maxed_out_alerts 是什么;它是一个python字符串吗? &lt;span tal:replace="repr(maxed_out_alerts)"&gt;Python representation&lt;/span&gt; 添加到您的文档时会说什么?
  • @Martijn。感谢回复。 “maxed_out_alerts”是python字典中的一个键,值为“yes”。字典正在传回变色龙模板。您的代码:Python 表示 在我的模板中显示值“yes”。
  • 我从faqs.org/docs/ZopeBook/AdvZPT.html 关注了以下信息----Not Expressions Not 表达式让你否定其他表达式的值。例如:

    没有包含的对象。

    当应用它们的表达式为假时,非表达式返回真,反之亦然。在 Zope 中,不存在的变量、零、空字符串、空序列、nothing 和 None 被认为是假的,而其他一切都是真的。
  • 你在遍历字典吗?有多个键吗?
  • 它只是一本字典,其键、值为 {'maxed_out_alerts':'yes'} 或 {'maxed_out_alerts':''}。我希望我的模板根据条件显示某些文本。如果“是”以一种方式显示。如果清空另一个。

标签: pyramid template-engine chameleon template-tal


【解决方案1】:

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

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

【讨论】:

  • 感谢大家的回复。他们都工作,包括我的。我在我的代码中做了一些我模糊的眼睛看不到的愚蠢的事情。但是,我最喜欢这个答案并将使用它。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-08-27
    • 2023-03-03
    • 1970-01-01
    • 2011-12-07
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    相关资源
    最近更新 更多