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))
Другие вопросы по тегам