with-html-output добавляет строку при использовании:li
Я работаю над Lisp For The Web Адама Торнхилла и застрял в создании HTML-страницы с элементом li в ней.
(with-html-output (*standard-output* nil :prologue t :indent t)
(htm
(:li (:a :href "Link" "Vote!")
)))
Когда я его компилирую, следующий вывод выводится в REPL
(with-html-output (*standard-output* nil :prologue t :indent t)
(htm
(:li (:a :href "Link" "Vote!")
)))
<!DOCTYPE html>
<li>
<a href='Link'>Vote!
</a>
</li>
"
<li>
<a href='Link'>Vote!
</a>
</li>"
Строка в конце выходных данных обычно не добавляется, и сайт, включающий это, не отображается в hunchentoot. Добавление:ol вокруг:li не помогает, и я хотел, чтобы пример был минимальным.
Код из книги в качестве ссылки:
(define-easy-handler (retro-games :uri "/retro-games") ()
(standard-page (:title "Top Retro Games")
(:h1 "Vote on your all time favourite retro games!")
(:p "Missing a game? Make it available for votes " (:a :href "new-game" "here"))
(:h2 "Current stand")
(:div :id "chart" ; Used for CSS styling of the links.
(:ol
(dolist (game (games))
(htm
(:li (:a :href (format nil "vote?name=~a" (escape-string ; avoid injection attacks
(name game))) "Vote!")
(fmt "~A with ~d votes" (name game) (votes game)))))))))
1 ответ
Первое, что вы видите, это то, что печатает форма *standard-output*
при оценке. Строка, видимая после этого, является результатом формы, напечатанным REPL. Поскольку ваш обработчик Hunchentoot интересуется только тем, что идет в выходной поток, результат не имеет значения.
Чтобы просто получить результат в виде строки, вы можете использовать with-html-output-to-string
:
(with-html-output-to-string (str nil :prologue t :indent t)
(htm
(:li (:a :href "Link" "Vote!"))))
С другой стороны, чтобы подавить результирующую строку и увидеть документ только как выписанный, вы можете сделать что-то вроде этого:
(progn
(with-html-output (*standard-output* nil :prologue t :indent t)
(htm
(:li (:a :href "Link" "Vote!"))))
(values))