我使用HStringTemplate
渲染一个非常简单的模板,使用数据结构来填充"洞"。模板渲染的结果只是一个String
我喂toResponse
。
即使这个渲染模板是有效的html happstack使用text/plain
Content-Type
。
这是什么原因?不应该text/html
是默认的,因为它是一个web服务器?我真的需要自己使用toResponseBS
和设置text/html
吗?
ServerPart Response
的代码data Person = Person
{ name :: String
, age ::Int
} deriving (Data, Typeable)
buildTemplate :: Person -> String -> FilePath -> ServerPart Response
buildTemplate fields name template = do
unrendered <- liftIO $ readFile template
ok $ toResponse $ renderTemplate name fields unrendered
renderTemplate :: String -> Person -> String -> String
renderTemplate name fields unrendered = toString rendered
where rendered = setAttribute name fields $ newSTMP unrendered
下面是web服务器的输出:
Connection:Keep-Alive
Content-Type:text/plain; charset=UTF-8
Date:Wed, 09 Jan 2013 14:51:27 GMT
Server:Happstack/7.1.1
Transfer-Encoding:chunked
身体<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Memlikweb</title>
</head>
<body>
<h1>Hello, Richard!<h1>
<p>Do you have 25 for me?</p>
</body>
</html>
如果将text . html传递给toResponse,则内容类型将为text/html。您正在传递一个字符串,toResponse认为该字符串表示内容类型为纯文本。
happstack-hstringtemplate包提供了一个ToMessage StringTemplate
的实例,这意味着如果你导入它,然后在模板上使用toResponse
而不渲染它,它会做正确的事情。