我不确定这是我使用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>
如果我修改了该函数并添加了一个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一起使用。
答案 0 :(得分:2)
这种情况在CL-WHO evaluation rules下的“一个既不是字符串也不是关键字的表格......”(:label :for name label)
属于该规则,并且只是评估,但它没有输出任何东西,所以没有任何效果。一个简单的解决方法:改为使用(str label)
。