我正在使用HStringTemplate
使用数据结构渲染一个非常简单的模板来填充“漏洞”。模板渲染的结果只是String
我用toResponse
。
即使此呈现模板有效,html happstack也会使用text/plain
Content-Type
。
这是什么原因? text/html
不应该是默认值,因为它是网络服务器吗?
我是否真的需要使用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
以下是网络服务器的输出:
头
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>
答案 0 :(得分:3)
如果您将Text.Html传递给toResponse,则内容类型将为text / html。您正在传递一个字符串,toResponse表示内容类型是纯文本。
答案 1 :(得分:2)
happstack-hstringtemplate包为ToMessage StringTemplate
提供了一个实例,这意味着如果您导入它然后在模板上使用toResponse
而不渲染它,它将做正确的事情。