Я пытаюсь передать pydoctor в twisted.web.template и столкнулся с довольно простой проблемой: pydoctor использует epydoc для рендеринга docstrings в HTML, но я не могу см. способ включения этого HTML в сгенерированную страницу без экранирования. Что я могу сделать?эквивалент nevow.tags.raw для twisted.web.template
ответ
Существует несколько намерений не вставлять HTML в страницу без синтаксического анализа; twisted.web.template
- это немного более пристальный человек, производящий правильный выход, чем nevow.
Существует несколько способов обойти это.
- В конечном счете, ваш HTML-код будет иметь какой-то поток вывода. Вы можете просто вставить рендерер, который возвращает пару объектов
Deferred
, и делает.write
в базовый поток после первого запуска, но перед вторым. Вид брутто, но он эффективно выражает ваши намерения :). - Вы можете просто повторно проанализировать вывод epydoc в HTML, используя
XMLString
или аналогичный, так чтоtwisted.web.template
может записать его правильно. Это будет «растрачивать» немного процессора, но, на мой взгляд, это будет стоить того, чтобы (A) провести стресс-тест, он даст twt и (B) гарантию - предположив, чтоt.w.t
верен - что он вам даст что вы испускаете действительный HTML.
Однако, когда я писал этот ответ, я понял, что точка 2 обычно не возможна с произвольным HTML-кодом с текущим общедоступным API-интерфейсом twisted.web.template. В идеале вы можете использовать html5lib
для синтаксического анализа этого материала, а затем просто сбрасывать анализируемый ввод в дерево документов.
Если вы не против удаляться с помощью частного API, вы можете подключить html5lib's SAX support к internal SAX parser, которые мы используем для загрузки шаблонов.
Конечно, реальное решение является fix the ticket you already filed, так что вы не должны использовать частный API за пределами самой Twisted ...
Спасибо за подтверждение моих подозрений, что нет никакой возможности для этого сегодня. Сначала я дам вариант 2. – mwhudson