(in-package :web-apps) (defun get-product (n) ;; Query the DB. (list n (format nil "Product nb ~a" n) 9.99)) (defun products (&optional (n 5)) (loop for i from 0 below n collect (get-product i))) (defvar *server* nil "Server instance (Hunchentoot acceptor).") (defparameter *port* 8899 "The application port.") (defun render (template &rest args) (apply #'djula:render-template* (djula:compile-string template) nil args)) (defparameter *template-root* " Lisp web app ") (defparameter *template-product* " {{ product }} {% if debug %} debug info! {% endif %} ") (easy-routes:defroute root ("/") () (render *template-root* :products (products))) (easy-routes:defroute product-route ("/product/:n") (&get debug &path (n 'integer)) (render *template-product* :product (get-product n) :debug debug)) (defroute root ("/" :method :get) () (render-products)) (defun start-server (&key (port *port*)) (format t "~&Starting the web server on port ~a~&" port) (force-output) (setf *server* (make-instance 'easy-routes:easy-routes-acceptor :port port)) (hunchentoot:start *server*)) (defun stop-server (&optional (server *server*)) (hunchentoot:stop server))