1

我正在使用HStringTemplate数据结构来渲染一个非常简单的模板来填充“漏洞”。模板渲染的结果只是String我吃toResponse的。

即使这个呈现的模板是有效的 html happstacktext/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>
4

2 回答 2

3

If you pass Text.Html to toResponse the content type will be text/html. You are passing a string, which toResponse takes to mean that the content type is plain text.

于 2013-01-09T15:15:45.517 回答
2

happstack -hstringtemplate包提供了一个实例,ToMessage StringTemplate这意味着如果您导入它然后toResponse在模板上使用而不渲染它,它将做正确的事情。

于 2013-01-10T09:34:44.070 回答