DEV Community

vindarel
vindarel

Posted on

Common Lisp HTML templates: using Djula in .lisp files

;;;
;;; How to use Djula templates in-file, without separate file templates.
;;;
;;; This can make it easier to ship your app as a single binary.
;;; Otherwise, see
;;; https://lisp-journey.gitlab.io/blog/lisp-for-the-web-build-standalone-binaries-foreign-libraries-templates-static-assets/#embed-html-djula-templates-in-your-binary
;;;
;;; We use two Djula functions:
;;; - compile-string
;;; - render-template*
;;;
;;;

#++
(ql:quickload '("djula" "pythonic-string-reader"))

(pythonic-string-reader:enable-pythonic-string-syntax)

(defparameter *template-hello* """
{% if foo %}
 foo is true
{% else %}
 foo is false
{% endif %}
""")

(defun render (s &rest keys)
  (apply
   #'djula:render-template*
   (djula:compile-string s)
   nil
   ;; key arguments:
   keys
   ))

#++
(render *template-hello* :foo t)
;; =>
" foo is true "
Enter fullscreen mode Exit fullscreen mode

Top comments (0)