функция, использующая параметр игнорирования cl-who: with-html-output - PullRequest
0 голосов
/ 02 января 2011

Я не уверен, является ли это проблемой с моим использованием cl-who (в частности with-html-output-to-string и with-html-output) или проблемой с моим пониманием Common Lisp (так как это мой первый проект с использованием Lisp).

Я создал функцию для создания полей формы:

(defun form-field (type name label)
  (cl-who:with-html-output (*standard-output* nil)
    (:div :class "field"
      (:label :for name label)
      (:input :type type :name name))))

При использовании этой функции, например: (form-field "text" "username" "Username") параметр label, похоже, игнорируется ... вывод HTML:

<div class="field"><label for="username"></label>
<input type="text" name="username"/></div>

вместо ожидаемого результата:

<div class="field"><label for="username">Username</label>
<input type="text" name="username"/></div>

Если я изменю функцию и добавлю оператор печати:

(defun form-field (type name label)
  (cl-who:with-html-output (*standard-output* nil)
    (print label)
    (:div :class "field"
      (:label :for name label)
      (:input :type type :name name))))

Строка «Имя пользователя»успешно выводится (но все еще игнорируется в HTML) ... есть идеи, что может вызвать это?

Имейте в виду, я вызываю эту функцию в cl-who:with-html-output-to-string для использования с hunchentoot.

1 Ответ

2 голосов
/ 02 января 2011

Эта ситуация описана в правилах оценки CL-WHO в разделе «Форма, которая не является ни строкой, ни ключевым словом ...» (:label :for name label) подпадает под это правило, и она только что оценена, но он ничего не выводит, поэтому не имеет никакого эффекта. Одно простое исправление: используйте (str label) вместо.

...