Как создать HTML из списка
Обычный способ создания HTML с помощью CL-WHO - использование макросов
with-html-output
а также
with-html-output-to-string
. Здесь используется специальный синтаксис. Например:
(let ((id "greeting")
(message "Hello!"))
(cl-who:with-html-output-to-string (*standard-output*)
((:p :id id) message)))
Можно ли записать данные
((:p :id id) message)
в виде списка вместо использования синтаксиса макросов, показанного выше? Например, я хотел бы определить HTML как список, подобный этому:
(let* ((id "greeting")
(message "Hello!")
(the-html `((:p :id ,id) ,message)))
;; What should I do here to generate HTML using CL-WHO?
)
Может ли CL-WHO взять обычный список Лиспа и создать из него HTML?
1 ответ
Вы хотите вставить код в выражение.
На самом деле вам понадобится eval:
(let* ((id "greeting")
(message "Hello!")
(the-html `((:p :id ,id) ,message)))
(eval `(cl-who:with-html-output-to-string (*standard-output*)
,the-html)))
Но это не хорошо использовать. Но макрос содержит неявное
eval
. Я бы определил макрос для этого и вызвал макрос:
(defun html (&body body)
`(cl-who:with-html-output-to-string (*standard-output*)
,@body))
;; but still one doesn't get rid of the `eval` ...
;; one has to call:
(let* ((id "greeting")
(message "Hello!")
(the-html `((:p :id ,id) ,message)))
(eval `(html ,the-html)))