5

如何将纯 html 格式的文件(不是 hamlet 格式的文件)加载为小部件?换句话说,我正在寻找 html 等价物:

toWidget $(whamletFile "test.hamlet")
4

2 回答 2

6

为此,您sendFile在处理程序函数中使用(参见其定义

第一个参数是 Mime 类型,而第二个参数是文件路径。

例如,您可以编写如下代码:

getMyFileR :: Handler ()
getMyFileR = sendFile "text/html" "myfile.html"

这是另一个例子。假设我有以下模型:

Resource
    filename    FilePath
    mimetype    ContentType

    deriving    Typeable

处理程序可能如下所示:

resourceDirectory :: FilePath
resourceDirectory = "resource"

getResourceGetR :: ResourceId -> Handler ()
getResourceGetR resourceId = do
    resource <- runDB $ get404 resourceId

    sendFile (resourceMimetype resource)
             (resourceDirectory </> unpack (resourceFilename resource))

编辑 2015-06-05

sendFile以低电平运行而addScript$(widgetFile …)以较高电平运行。

$(widgetFile …)在编译项目之前,使用 TemplateHaskell 将您的 Hamlet/Cassius/Lucius/Julius 模板转换为实际的 Haskell 源代码。这同样适用于[hamlet|…|]

addScript与一段Route时间一起sendFile工作与一个FilePath。这意味着addScript将能够在编译时检测到丢失的文件。sendFile将在运行时检测丢失的文件。

有一些工具可以将 Html 转换为 Hamlet:

对于 Html 文件的等价物addScript没有意义:addScript将生成一个script标签来告诉浏览器下载外部资源。这不适用于 Html 文件。

于 2015-05-26T05:12:02.697 回答
0
import Import
import Text.Blaze.Html       (preEscapedToHtml)
import Text.Shakespeare.Text (stextFile)

myWidget :: Widget
myWidget = toWidget . preEscapedToHtml $ $(stextFile "templates/some-file.html")
于 2020-03-06T06:24:31.787 回答