我無法理解變色龍的標籤。我是django的用戶,但決定將我的CompSci課程隊友和我自己介紹給金字塔,因爲我雖然更輕便=易於學習。Python Pyramid&Chameleon模板語言轉義html
目前,$ {}標記正在轉義任何我試圖通過它輸出的html標記。在Django中,有一些方法可以指定一個變量是「安全的」,不需要轉義。
我怎樣才能在金字塔/變色龍做同樣的事情?
我無法理解變色龍的標籤。我是django的用戶,但決定將我的CompSci課程隊友和我自己介紹給金字塔,因爲我雖然更輕便=易於學習。Python Pyramid&Chameleon模板語言轉義html
目前,$ {}標記正在轉義任何我試圖通過它輸出的html標記。在Django中,有一些方法可以指定一個變量是「安全的」,不需要轉義。
我怎樣才能在金字塔/變色龍做同樣的事情?
變色龍基於Zope Page Templates庫,所以如果您發現變色龍文檔缺乏,您可能希望查看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:更換或TAL:內容功能,你需要用你的字符串中的另一個目的是,變色龍渲染器將不會試圖逃跑(這意味着它有一個返回字符串應該是的__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>'))
變色龍還允許$ {structure:markup}。
這就是我來到的原因 – 2013-12-20 17:48:30
因爲我不清楚(也許是因爲我是Chameleon的新手):關鍵字是'structure:'。我試圖使用'$ {myVar:markup}',並且因錯誤消息而丟失了一些信息。 – tsauerwein 2014-06-13 09:19:46
謝謝。文字的第二個解決方案非常優雅。 – rdrey 2011-03-19 12:14:13
jules下面的解決方案似乎是最直接的。 – GuyNoir 2013-05-21 05:15:39