[hunchentoot-devel] easy-handler outputs to REPL instead of client

Hans Hübner hans.huebner at gmail.com
Fri Dec 23 17:57:21 UTC 2011


Here is some food for thought:

(with-output-to-string (s)
  (cl-who:with-html-output (s)
    (dotimes (i 10)
      (cl-who:htm
       (:p "hello")))))

-Hans

On Fri, Dec 23, 2011 at 5:46 PM, Tyler Smith <tyler.smith at mail.mcgill.ca> wrote:
> Thank you!
>
> I didn't realize that with-html-output was returning a string, I
> thought it was emitting the html to the output as a side effect. In
> retrospect, that's silly.
>
> The following works, although it looks a little unwieldy. Any
> suggestions for improvement are welcome. Otherwise, thanks for your
> help and for all your code.
>
> Cheers,
>
> Tyler
>
>
> (define-easy-handler (tyler :uri "/tyler") ()
>  (multiple-value-bind (records fields)
>      (select [genus] [species] :from "specimens")
>    (loop for rec in records
>       collect
>         (loop
>            for label in fields
>            for val in rec
>            collect (with-html-output-to-string (*standard-output*)
>                      (:dt :class label (str label))
>                      (:dd :class label (str val)))
>            into inner-output
>            finally (return (format nil "~{~a~&~}" inner-output)))
>       into outer-output
>       finally (return (format nil "~{~a~&~}" outer-output)))))
>
>
> On Fri, Dec 23, 2011 at 3:05 AM, Edi Weitz <edi at agharta.de> wrote:
>> Your loop doesn't return anything, does it?
>>
>> On Thu, Dec 22, 2011 at 11:51 PM, Tyler Smith
>> <tyler.smith at mail.mcgill.ca> wrote:
>>> Hi,
>>>
>>> I'm trying to set up a simple sql-based website using cl-who, cl-sql
>>> and hunchentoot. I've got the basic cl-sql and cl-who parts working,
>>> but I'm having a trouble serving the pages with hunchentoot.
>>>
>>> The following works as expected:
>>>
>>> (ql:quickload :hunchentoot)
>>> (use-package :hunchentoot)
>>>
>>> (setf my-acceptor (start (make-instance 'hunchentoot:easy-acceptor :port 4242)))
>>>
>>> (define-easy-handler (tyler :uri "/tyler") ()
>>>  (with-html-output (*standard-output*)
>>>    (:ul (:li "hi there again"))))
>>>
>>>
>>> After this, if I open localhost:4242/tyler in a browser I see my
>>> unordered list. However, with this:
>>>
>>> (define-easy-handler (tyler :uri "/tyler") ()
>>>  (multiple-value-bind (records fields)
>>>      (select [genus] [species] :from "specimens")
>>>    (loop for rec in records do
>>>         (loop for label in fields
>>>            for val in rec do
>>>              (with-html-output (*standard-output*)
>>>                (:dt :class label (str label))
>>>                (:dd :class label (str val)))))))
>>>
>>> When I browse to localhost:4242/tyler nothing appears in the browser,
>>> instead the html is printed in the REPL. If I evaluate just the (M-V-B
>>> ...) form without the enclosing (D-E-H ...) it outputs the html to the
>>> REPL as I expect.
>>>
>>> I have been following the examples in the hunchentoot docs, but I'm
>>> stumped as to why this doesn't work. What have I missed?
>>>
>>> Thanks,
>>>
>>> Tyler
>>>
>>> _______________________________________________
>>> tbnl-devel site list
>>> tbnl-devel at common-lisp.net
>>> http://common-lisp.net/mailman/listinfo/tbnl-devel
>>>
>>
>> _______________________________________________
>> tbnl-devel site list
>> tbnl-devel at common-lisp.net
>> http://common-lisp.net/mailman/listinfo/tbnl-devel
>
> _______________________________________________
> tbnl-devel site list
> tbnl-devel at common-lisp.net
> http://common-lisp.net/mailman/listinfo/tbnl-devel




More information about the Tbnl-devel mailing list