在Racket中生成HTML

时间:2012-02-12 21:59:59

标签: html racket

在Racket中从X表达式生成HTML的推荐方法是什么?看起来像response/xexpr会这样做,但似乎是为了提供http响应而设计的。我唯一需要的是从Racket列表(或X表达式)生成HTML字符串,不需要涉及Web服务器。

2 个答案:

答案 0 :(得分:6)

如果我没有弄错的话,xml库中的xexpr->string函数应该按照您的要求进行操作。有关使用它的示例,您可以查看here,其中示例使用它为简化的Web服务器应用程序生成HTML响应。

> (xexpr->string '(html (head (title "Hello")) (body "Hi!")))
"<html><head><title>Hello</title></head><body>Hi!</body></html>"

答案 1 :(得分:5)

如果您愿意为可能更方便的设施转储xexprs,那么有一种新语言可用于生成Racket网页。它尚未记录(因此它仍然是新的并且没有公开),但您可以在these sources中看到它是如何使用的。作为演示它的快速示例,运行:

#lang scribble/html
@(define name "foo")
@html{@head{@title{@name}}
      @body{@h1{@name}}}

另一个例子将它用作库:

#lang at-exp racket/base
(require scribble/html)
(define (page name)
  (output-xml
   @html{@head{@title{@name}}
         @body{@h1{@name}}}))
@page{foo}

不需要at-exp,只需在代码中编写大量文本即可。 (它对xexprs也同样有用。)

主要区别在于,在这种语言中,HTML标签实际上是绑定,这使得维护代码变得方便。它在文本中可以非常灵活 - 例如,没有必要将它保持在严格的字符串和子标记列表中,因此您永远不会遇到诸如在何处使用append-map等问题。