2013-05-19 2 views
2

Я пытаюсь передать pydoctor в twisted.web.template и столкнулся с довольно простой проблемой: pydoctor использует epydoc для рендеринга docstrings в HTML, но я не могу см. способ включения этого HTML в сгенерированную страницу без экранирования. Что я могу сделать?эквивалент nevow.tags.raw для twisted.web.template

ответ

2

Существует несколько намерений не вставлять HTML в страницу без синтаксического анализа; twisted.web.template - это немного более пристальный человек, производящий правильный выход, чем nevow.

Существует несколько способов обойти это.

  1. В конечном счете, ваш HTML-код будет иметь какой-то поток вывода. Вы можете просто вставить рендерер, который возвращает пару объектов Deferred, и делает .write в базовый поток после первого запуска, но перед вторым. Вид брутто, но он эффективно выражает ваши намерения :).
  2. Вы можете просто повторно проанализировать вывод 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 ...

+0

Спасибо за подтверждение моих подозрений, что нет никакой возможности для этого сегодня. Сначала я дам вариант 2. – mwhudson