Python Pyramid和Chameleon模板语言转义html

发布于 2021-01-29 16:41:47

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

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

如何在金字塔/变色龙中做同样的事情?

关注者
0
被浏览
40
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    Chameleon基于Zope页面模板库,因此,如果您发现缺少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>'))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看