Aserve & CL-EMB

Aserve でテンプレートエンジンの CL-EMB を使ってみました。

hello.tmplを作成

<html>
<head><title>テストページ</title></head>
<body>
<% @var name %>
</body>
</html>

Lipsコード

(defun to-octets-string (str)
  (let* ((arr (sb-ext:string-to-octets str
	:external-format sb-impl::*default-external-format*
	:null-terminate nil))

	 (len (length arr))
	 (ret (make-array len :fill-pointer 0 :element-type 'character)))
    (dotimes (i len) (vector-push (code-char (elt arr i)) ret))
    ret))

(defun MB (str)
  (princ (to-octets-string str)))

(net.aserve:publish
 :path "/hello"
 :content-type "text/html; charset=UTF-8"
 :function
 #'(lambda (req ent)
     (net.aserve:with-http-response (req ent)
       (net.aserve:with-http-body (req ent)
	 (format (net.aserve:request-reply-stream req)
		 (MB (emb:execute-emb #P"/home/lisp/hello.tmpl"
				      :env '(:name "こんにちは!"))))))))