cl-кто и формат

Я пытаюсь сгенерировать следующий html-код, используя cl-who:

<html>
<body>
<div id="cnt_1"></div>
<div id="cnt_2"></div>
<div id="cnt_3"></div>
</body>
</html>

И вот код, который, как я думал, будет работать:

(with-html-output-to-string (*standard-output* nil)
 (:html
  (:body
   (do ((cnt 1 (+ cnt 1)))
       ((> cnt 3))
     (htm (:div :id (format t "cnt_~A" cnt)))))))

Но вместо этого я получаю следующий вывод:

<html><body><divcnt_1></div><divcnt_2></div><divcnt_3></div></body></html>

Похоже, :id не работает с вызовами функций. Значит ли это, что я не могу использовать формат в cl-who? Что я должен использовать вместо этого?


person mgs    schedule 03.07.2012    source источник


Ответы (1)


Это потому, что вы не хотите писать прямо в потоке.

CL-USER> (with-html-output-to-string (s) (:div :id "test"))
"<div id='test'></div>"

CL-USER> (with-html-output-to-string (s)
           (:html
            (:body
             (do ((cnt 1 (+ cnt 1)))
                 ((> cnt 3))
               (htm (:div :id (format nil "cnt_~A" cnt)))))))

"<html><body><div id='cnt_1'></div><div id='cnt_2'></div><div id='cnt_3'></div></body></html>"

Кстати, если вы хотите писать прямо в потоке, используйте CL-WHO:FMT.

person Daimrod    schedule 03.07.2012
comment
FMT работает в разделе содержимого в синтаксисе, а не в разделе значения атрибута. - person Xach; 03.07.2012
comment
@Xach: Под работой я полагаю, вы имеете в виду, что она делает то, что вы ожидаете, потому что она работает так же, как ФОРМАТ операции (запись в текущий поток). - person Daimrod; 03.07.2012