加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python Pyramid&Chameleon模板语言逃脱了html

发布时间:2020-12-20 13:03:45 所属栏目:Python 来源:网络整理
导读:我无法理解变色龙的标签.我是 django的用户,但我决定将我的CompSci课程伙伴和我自己介绍给Pyramid,因为我虽然更轻巧=更容易学习. 目前${}标签正在逃避我试图通过它输出的任何html标签.在django中,有一些方法可以指定变量是“安全的”并且不需要进行转义. 我
我无法理解变色龙的标签.我是 django的用户,但我决定将我的CompSci课程伙伴和我自己介绍给Pyramid,因为我虽然更轻巧=更容易学习.

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

我怎样才能在金字塔/变色龙中做同样的事情?

解决方法

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

无论如何,有两种主要方法可以做到这一点.如果使用tal:replace或tal:content标签属性进行渲染,则可以使用“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__方法返回字符串应该是什么).通常,这意味着创建一个’Literal’类,如下所示:

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>'))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读