4

我无法理解变色龙的标签。我是 django 用户,但决定将我的 CompSci 课程伙伴和我自己介绍给 Pyramid,因为我虽然更轻量级 = 更容易学习。

目前 ${} 标签正在转义我试图通过它输出的任何 html 标签。在 django 中,有一些方法可以指定变量是“安全的”并且不需要转义。

我怎样才能在 Pyramid / Chameleon 中做同样的事情?

4

2 回答 2

16

Chameleon 还允许使用 ${structure: markup}。

于 2012-04-29T02:32:32.113 回答
11

Chameleon 基于Zope Page Templates库,因此如果您发现缺少 Chameleon 文档,您可能希望查看 zpt 文档。

无论如何,有两种主要方法可以做到这一点。如果您使用 tal:replace 或 tal:content 标签属性进行渲染,则可以使用"structure"。这是通过structure在字符串的开头放置一个空格,最后是您希望呈现的模板变量的名称来完成的。一个例子如下所示:

s = '''
<html>
    <head>
    </head>
    <body>
        <div tal:content="structure t">
        </div>
    </body>
</html>
'''

from chameleon import PageTemplate

pt = PageTemplate(s)

print pt(t='<p>Hi!</p>')

如果您不想使用 tal:replace 或 tal:content 函数,则需要将字符串包装在 Chameleon 渲染器不会尝试转义的对象中(这意味着它有一个__html__返回字符串应该是什么的方法) . 通常,这意味着创建一个“文字”类,如下所示:

a = '''
<html>
    <head>
    </head>
    <body>
        <div>
            ${t}
        </div>
    </body>
</html>
'''

from chameleon import PageTemplate

pt = PageTemplate(a)

class Literal(object):
    def __init__(self, s):
        self.s =s

    def __html__(self):
        return self.s

print pt(t=Literal('<p>Hi!</p>'))
于 2011-03-18T06:42:11.747 回答