【问题标题】:Cheetah template filtersCheetah 模板过滤器
【发布时间】:2012-01-04 22:46:54
【问题描述】:

对不起,如果这个问题听起来很幼稚。我有一个猎豹模板,例如:

#filter None
<html>
<body>
$none should be ''
$number should be '1'
</body>
</html>
#end filter

namespace = {'none': None, 'number': 1}
所以基本上我想将所有 None 和非字符串值分别转换为 '' 和字符串。根据 Cheetah 的文档:http://www.cheetahtemplate.org/docs/users_guide_html_multipage/output.filter.html,我想要的是默认过滤器。这不是我在开头放#filter None 所做的吗?怎么行不通?

请帮我解决这个问题。谢谢

编辑:
为了更清楚,基本上我希望它通过这个简单的if 测试:

#filter None
<html>
<body>
#if $none == '' and $number == '1':
<b>yay</b>
#end if
</body>
</html>
#end filter

所以如果一切顺利,我应该看到的只是 yay

【问题讨论】:

  • 但是......你得到的结果是什么?
  • @RicardoCárdenes 我得到的是 $none == None 和 $number == 1。不是字符串
  • 我刚刚运行了您的示例并得到了 ` 应该是 ''` 和 1 should be '1',这正是我所期望的。我认为你想要'' should be '''1' should be '1'
  • 是的,这就是我想要的 :) 我的意思是它们应该被转换为字符串。如果我做#if $none == '' and $number == '1': &lt;p&gt;yay&lt;/p&gt; #end if 但它没有通过if 测试
  • 好吧,None 被翻译为''number也是如此。但是您不会在它们周围看到引号;这对于普通的模板来说是毫无用处的。此外,实际值保持原样:将值替换到模板中时执行过滤,这就是您的测试没有通过的原因!

标签: python filter cheetah


【解决方案1】:

为了解释你得到的结果,让我们定义一下:

def filter_to_string(value):
    if value is None:
        return ''
    return str(value)

假设这是我们的过滤器。现在,让我们天真地了解 Cheetah 是如何进行处理的(它比这更复杂一些)。你得到的结果将来自这个:

>>> "<html>\n<body>\n" + \
    filter_to_string(ns['none']) + " should be ''\n" + \
    filter_to_string(ns['number']) + " should be '1'\n</body>\n</html>\n"
"<html>\n<body>\n should be ''\n1 should be '1'\n</body>\n</html>\n"

ns 是命名空间。

鉴于此,您的结果是否仍然让您感到惊讶?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2023-04-05
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多