【问题标题】:Mako Filter in Chameleon?变色龙中的 Mako 过滤器?
【发布时间】:2013-02-09 16:17:35
【问题描述】:

有没有可能像我在 Mako 中使用的那样在 Chameleon 中使用模板过滤器?在 Mako 中,人们可以做类似的事情

${s | filter}

其中filter 是一个将字符串映射到字符串的函数,Mako 将filter 应用到s 并输出它(在转义HTML 实体之后)。所以人们可以很容易地做类似的事情

${s | nl2br}

我知道 Chameleon 的做法是 Line Breaking in Chameleon。但是我有更多关于这个过滤器的应用程序,所以我想知道 Chameleon 是否支持类似的东西。

【问题讨论】:

    标签: templates pyramid pylons mako chameleon


    【解决方案1】:

    在 Chameleon 中,管道运算符 (" | ") 运算符表示 try-except,而不是“应用过滤器”。

    但由于表达式语言只是 Python,因此不需要使用这种语法糖。

    此外,Chameleon 有一个 import: 表达式类型,可以帮助您导入辅助函数:

    <div tal:define="h import: helpers">
      ...
      ${structure: h.nl2br(s)}
    

    请注意,如果nl2br 返回一个实现__html__() 方法的对象,Chameleon 将调用此方法来生成输出,而您不需要structure: 来避免HTML 转义。

    也就是说,的确,Mako 的过滤器运算符有时会使模板代码更具可读性。

    【讨论】:

      【解决方案2】:

      变色龙的方式是

      ${nl2br(s)}
      

      我就是这么干的

      views.py

      form helpers import nl2br
      def my_view(request):
          return {
              'nl2br':nl2br,
          }
      

      模板.pt

      ${structure: nl2br(s)}
      

      【讨论】:

      • 我不太确定,但这只有在我禁用变色龙的 htmlentities 编码时才有效,对吧?这不是一个好主意 - 至少在我的情况下:-/
      • 添加结构:如果输出被解释为html
      • 作为对后来读者的警告:向输出添加结构可能意味着重大安全漏洞。
      【解决方案3】:

      不,没有。而是在您的视图中进行处理,或者在您的 TALES 表达式中使用 python 代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-29
        • 2013-02-09
        • 2012-12-31
        • 1970-01-01
        • 2015-10-03
        • 1970-01-01
        • 1970-01-01
        • 2012-06-24
        相关资源
        最近更新 更多