簡體   English   中英

Python Pyramid&Chameleon模板語言逃脫了html

[英]Python Pyramid & Chameleon templating language escapes html

我無法理解變色龍的標簽。 我是django的用戶,但我決定將我的CompSci課程伙伴和我自己介紹給Pyramid,因為我雖然更輕巧=更容易學習。

目前$ {}標簽正在逃避我試圖通過它輸出的任何html標簽。 在django中,有一些方法可以指定變量是“安全的”並且不需要進行轉義。

我怎樣才能在金字塔/變色龍中做同樣的事情?

變色龍還允許$ {structure:markup}。

Chameleon基於Zope頁面模板庫,因此如果您發現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>'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM