2012-02-12 20 views
6

Cách được khuyến nghị để tạo HTML từ biểu thức X trong Racket là gì? Có vẻ như response/xexpr sẽ làm điều đó, nhưng có vẻ như được thiết kế để phục vụ phản hồi http. Điều duy nhất tôi cần là tạo chuỗi HTML từ danh sách Racket (hoặc biểu thức X), không cần phải có máy chủ web liên quan.Tạo HTML trong Racket

Trả lời

6

Chức năng xexpr->string trong thư viện xml phải làm những gì bạn đang hỏi, nếu tôi không nhầm. Đối với một ví dụ mà nó được sử dụng, bạn có thể xem here, trong đó ví dụ sử dụng nó để tạo ra phản hồi HTML cho một ứng dụng máy chủ web đơn giản.

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

Hoạt động như một say mê, cảm ơn! – GiantSquid

5

Nếu bạn sẵn sàng đổ xexprs cho một cơ sở thuận tiện hơn, thì có một ngôn ngữ mới được sử dụng để tạo trang web Racket. Nó chưa được ghi chép (do đó nó vẫn còn mới và không công khai), nhưng bạn có thể thấy nó được sử dụng như thế nào trong these sources. Như một ví dụ nhanh đó chứng tỏ nó, chạy này:

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

Một ví dụ khác sử dụng nó như là một thư viện:

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

Các at-exp là không cần thiết, nó chỉ làm cho nó dễ dàng để viết rất nhiều văn bản trong mã. (Và nó cũng hữu ích với xexprs nữa.)

Sự khác biệt chính là ở ngôn ngữ này, các thẻ HTML thực sự là các ràng buộc, giúp thuận tiện cho việc duy trì mã. Nó cũng rất linh hoạt trong những gì nó có thể lấy làm văn bản - ví dụ, không cần phải giữ nó vào danh sách nghiêm ngặt các chuỗi và thẻ phụ, vì vậy bạn không bao giờ phải đối mặt với các câu hỏi như nơi sử dụng append-map v.v.