在 yesod (haskell) 中,如何将普通 html 格式的文件(不是 hamlet)加载为小部件?
In yesod (haskell), how do I load a plain html-formatted file (not a hamlet) as a widget?
如何加载 html 格式的普通文件(不是 hamlet 格式的文件)作为小部件?换句话说,我正在寻找 html 相当于:
toWidget $(whamletFile "test.hamlet")
为此,您在处理函数中使用 sendFile
(see its definition)
第一个参数是 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 …)
使用模板Haskell 将您的 Hamlet/Cassius/Lucius/Julius 模板转换为实际的 Haskell 源代码。同样适用于[hamlet|…|]
.
addScript
使用 Route
而 sendFile
使用 FilePath
。这意味着 addScript
将能够在编译时检测丢失的文件。 sendFile
将在运行时检测丢失的文件。
有一些工具可以将 Html 转换为哈姆雷特:
- a one line script(适用于简单的 Html),
- html2hamlet.
Html 文件的 addScript
等价物没有意义:addScript
将生成一个 script
标记来告诉浏览器下载外部资源。这不适用于 Html 文件。
import Import
import Text.Blaze.Html (preEscapedToHtml)
import Text.Shakespeare.Text (stextFile)
myWidget :: Widget
myWidget = toWidget . preEscapedToHtml $ $(stextFile "templates/some-file.html")
如何加载 html 格式的普通文件(不是 hamlet 格式的文件)作为小部件?换句话说,我正在寻找 html 相当于:
toWidget $(whamletFile "test.hamlet")
为此,您在处理函数中使用 sendFile
(see its definition)
第一个参数是 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 …)
使用模板Haskell 将您的 Hamlet/Cassius/Lucius/Julius 模板转换为实际的 Haskell 源代码。同样适用于[hamlet|…|]
.
addScript
使用 Route
而 sendFile
使用 FilePath
。这意味着 addScript
将能够在编译时检测丢失的文件。 sendFile
将在运行时检测丢失的文件。
有一些工具可以将 Html 转换为哈姆雷特:
- a one line script(适用于简单的 Html),
- html2hamlet.
Html 文件的 addScript
等价物没有意义:addScript
将生成一个 script
标记来告诉浏览器下载外部资源。这不适用于 Html 文件。
import Import
import Text.Blaze.Html (preEscapedToHtml)
import Text.Shakespeare.Text (stextFile)
myWidget :: Widget
myWidget = toWidget . preEscapedToHtml $ $(stextFile "templates/some-file.html")