函数使用cl-who:with-html-output忽略参数

时间:2011-01-02 01:43:37

标签: common-lisp hunchentoot

我不确定这是我使用cl-who(特别是with-html-output-to-stringwith-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>

如果我修改了该函数并添加了一个print语句:

(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 个答案:

答案 0 :(得分:2)

这种情况在CL-WHO evaluation rules下的“一个既不是字符串也不是关键字的表格......”(:label :for name label)属于该规则,并且只是评估,但它没有输出任何东西,所以没有任何效果。一个简单的解决方法:改为使用(str label)