Как сбросить html-строку в скрученный шаблон Python

Я создаю веб-сайт с использованием twisted.web.template, где несколько страниц имеют подокна с идентичным html-кодом. Поэтому я хочу использовать шаблоны и просто сбрасывать полную строку html в заполнители везде, где есть идентичный код. Но извращенная система шаблонов заключает эти строки в кавычки (похоже, отчасти из соображений безопасности), поэтому браузер не может интерпретировать их как html. Есть ли способ обойти это? Это кажется довольно нормальным сценарием использования, и, по моему опыту, это одно из основных применений php с apache...

Некоторый пример кода. Мой шаблон выглядит так

<html xmlns:t="http://twistedmatrix.com/ns/twisted.web.template/0.1">
    <body>
        <div t:render="content" />
    </body>
</html>

и мой класс рендеринга в python

class ExampleElement(Element):
    loader = XMLFile(FilePath('template.xml'))

    @renderer
    def content(self, request, tag):
        return tag('<b>This content should be in bold, but is quoted</b>')

Я знаю, что для последней строки я мог бы написать (с соответствующим импортом)

return tag(tags.b('Bold content'))

но html-строки, которые я на самом деле хочу вставить, намного больше, и неудобно писать их так, а не просто одну необработанную html-строку.


person funklute    schedule 21.01.2014    source источник


Ответы (1)


Используйте загрузчик:

class ExampleElement(Element):
    loader = XMLFile(FilePath('template.xml'))

    extraContent = XMLFile(FilePath('extra-content.xml'))

    @renderer
    def content(self, request, tag):
        return self.extraContent.load()

Или, если вам действительно нужно, чтобы дополнительный материал был в строке исходного файла, а не в файле шаблона:

class ExampleElement(Element):
    loader = XMLFile(FilePath('template.xml'))

    extraContent = XMLString("<b>This content will be in bold</b>")

    @renderer
    def content(self, request, tag):
        return self.extraContent.load()
person Jean-Paul Calderone    schedule 21.01.2014