0

我不确定这是我使用cl-who(特别是with-html-output-to-stringand 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 中仍被忽略)......有什么想法可能导致这种情况吗?

请记住,我在 acl-who:with-html-output-to-string中调用此函数以与 hunchentoot 一起使用。

4

1 回答 1

2

这种情况在“既不是字符串也不是关键字的表单...”下的CL-WHO 评估规则(:label :for name label)中进行了描述,属于该规则,它只是被评估,但它不输出任何内容,因此没有效果。一个简单的解决方法:(str label)改用。

于 2011-01-02T11:57:11.250 回答