在yesod(haskell)中,如何将一个普通的html格式的文件(而不是一个小村庄)加载为一个小部件?

daj*_*daj 5 haskell yesod shakespeare-text

如何将纯文本格式的文件(不是哈姆雷特格式的文件)加载为窗口小部件?换句话说,我正在寻找相当于html的html:

toWidget $(whamletFile "test.hamlet")
Run Code Online (Sandbox Code Playgroud)

zig*_*zou 6

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

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

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

getMyFileR :: Handler ()
getMyFileR = sendFile "text/html" "myfile.html"
Run Code Online (Sandbox Code Playgroud)

这是另一个例子.说我有以下型号:

Resource
    filename    FilePath
    mimetype    ContentType

    deriving    Typeable
Run Code Online (Sandbox Code Playgroud)

处理程序可能如下所示:

resourceDirectory :: FilePath
resourceDirectory = "resource"

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

    sendFile (resourceMimetype resource)
             (resourceDirectory </> unpack (resourceFilename resource))
Run Code Online (Sandbox Code Playgroud)

编辑2015-06-05

sendFile在较低水平运行addScript$(widgetFile …)在较高水平运行.

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

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

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

相当于addScriptHtml文件没有意义:addScript将生成一个script标签,告诉浏览器下载外部资源.这不适用于Html文件.