Язык шаблонов Python Pyramid & Chameleon избегает HTML - PullRequest
3 голосов
/ 18 марта 2011

Я не могу понять теги хамелеона.Я - пользователь django, но решил представить себя и своих одноклассников по CompSci в Pyramid, поскольку я хоть и более легкий = легче учиться.

В настоящий момент тег $ {} экранирует любые теги htmlпытаюсь выводить через него.В django был какой-то способ указать, что переменная «безопасна» и ее не нужно экранировать.

Как я могу сделать то же самое в Pyramid / Chameleon?

Ответы [ 2 ]

15 голосов
/ 29 апреля 2012

Хамелеон также допускает $ {structure: markup}.

9 голосов
/ 18 марта 2011

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 не будет пытаться использоватьescape (имеется в виду метод __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>'))
...